Your SlideShare is downloading. ×
0
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Partie 4: Fonctions - Programmation orientée objet en C++

920

Published on

Support material for a continued education course "Introduction to object oriented programming in C++". …

Support material for a continued education course "Introduction to object oriented programming in C++".
In French.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
920
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
92
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programmation Orientée Objet en C++ 4ème Partie: Fonctions Fabio Hernandez Fabio.Hernandez@in2p3.fr
  • 2. Vue dEnsemble Notions de base Types, variables, opérateurs Contrôle dexécution Fonctions Mémoire dynamique Qualité du logiciel Evolution du modèle objet Objets et classes Fonctions membres Classes génériques Héritage Polymorphisme Héritage multiple Entrée/sortiePOO en C++: Fonctions 108 © 1997-2003 Fabio HERNANDEZ
  • 3. Table des Matières Déclaration de la Fonction Utilisation de la Fonction Prototype de Fonction Contrôle de Type Valeur de Retour Signature de Fonction Passage des Arguments Tableau comme Argument Fonctions Inline Portée des Variables Durée de Vie des VariablesPOO en C++: Fonctions 109 © 1997-2003 Fabio HERNANDEZ
  • 4. Déclaration de la Fonction Une fonction est une opération définie par le programmeur Les opérandes sont les paramètres de la fonction Exemple type de la nom de la valeur de fonction liste des retour paramètres int min(int a, int b) { corps de la fonction return (a < b) ? a : b; }POO en C++: Fonctions 110 © 1997-2003 Fabio HERNANDEZ
  • 5. Utilisation de la Fonction Toute fonction doit être déclarée avant son utilisation #include <iostream> // C++ standard I/O declarations extern int min(int a, int b); int main() { int value1; int value2; cout << "Enter two integers: " << endl; cin >> value1 >> value2; cout << "The minimun between: " << value1 << " and " << value2 << " is " << min(value1, value2) << endl; return 0; }POO en C++: Fonctions 111 © 1997-2003 Fabio HERNANDEZ
  • 6. Prototype de Fonction Une fonction ne peut être définie quune seule fois dans un programme Mais peut être utilisée autant de fois que nécessaire Généralement, elle est définie dans un fichier .cpp avec dautres fonctions et utilisée dans des modules différents Le moyen de déclarer une fonction est le prototype extern int min(int a, int b); Lobjectif du prototype est dinformer le compilateur du type de la valeur de retour, du nombre de paramètres et du type de chacunPOO en C++: Fonctions 112 © 1997-2003 Fabio HERNANDEZ
  • 7. Prototype de Fonction (suite) Associé à chaque module (fichier .cpp) il faut créer un fichier avec les prototypes des fonctions définies dans celui-ci Ce fichier de prototypes sera inclus via une instruction pré-processeur dans tous les autres modules qui utilisent une ou plusieurs de ces fonctions Exemple: supposons que dans le fichier util.cpp se trouvent les définitions des fonctions min et abs suivantes int min(int a, int b) { return (a < b) ? a : b; } int abs(int a) { return (a < 0) ? -a : a; }POO en C++: Fonctions 113 © 1997-2003 Fabio HERNANDEZ
  • 8. Prototype de Fonction (suite) Nous créons le fichier util.prt (le nom na pas dimportance pour le compilateur mais en a pour le programmeur) avec les déclarations suivantes extern int min(int a, int b); extern int abs(int a); Ce fichier peut maintenant être inclus dans tout module (fichier .cpp) nécessitant une des fonctions définies dans util.cpp #include <iostream> #include "util.prt" int main() { cout << "The absolute value of -345 is: " << abs(-345) << endl; return 0; }POO en C++: Fonctions 114 © 1997-2003 Fabio HERNANDEZ
  • 9. Contrôle de Type C++ est un langage fortement typé Le type de la valeur de retour et de chacun des arguments dune fonction sont contrôlés en compilation Sil y a des différences entre le type de la déclaration et le type des arguments utilisés dans linvocation de la fonction une conversion implicite est effectuée si possible (probablement avec warning) int i = min(234, 78.90); // conversion a int 78 autrement, une erreur est détectée et la compilation échoue int i = min(234, "a string"); // ERROR Le nombre darguments est aussi contrôléPOO en C++: Fonctions 115 © 1997-2003 Fabio HERNANDEZ
  • 10. Valeur de Retour Peut être dun type fondamental (int, long,...), dun type dérivé (int*) ou d un type défini par le programmeur enum Color {Black, White}; Color getComplementaryColor(Color currentColor) { return (currentColor == Black) ? White : Black; } Le type void est utilisé pour signifier labsence de valeur de retour void printError(const char* message) { cerr << "ERROR: " << message << endl; } Linstruction return nest pas strictement nécessaire pour une fonction qui retourne voidPOO en C++: Fonctions 116 © 1997-2003 Fabio HERNANDEZ
  • 11. Signature de Fonction La liste des arguments de la fonction est connue comme la signature de la fonction Le nom et la signature de la fonction identifient pleinement chaque fonction Exemple: float min(float a, float b) { return (a < b) ? a : b; } est différente de la fonction min vue précédemmentPOO en C++: Fonctions 117 © 1997-2003 Fabio HERNANDEZ
  • 12. Signature de Fonction (suite) Lors de linvocation de la fonction, le compilateur choisit entre les différentes possibilités, selon le type des arguments extern float min(float a, float b); extern int min(int a, int b); void main() { const float f1 = 0.234; const float f2 = 34.90; const int i1 = 190; int intMin = min(i1, 250); // min(int, int) is called float floatMin = min(f1, f2); // min(float, float) is called }POO en C++: Fonctions 118 © 1997-2003 Fabio HERNANDEZ
  • 13. Signature de Fonction (suite) Le type de la valeur de retour ne fait pas partie de la signature int min(short a, short b); short min(short a, short b); // ERROR: same name and signaturePOO en C++: Fonctions 119 © 1997-2003 Fabio HERNANDEZ
  • 14. Passage des Arguments Les arguments des fonctions en C++ sont passés par valeur Une copie de la valeur de chaque argument est copiée dans la pile dexécution de la fonction Les modifications faites à ces valeurs affectent uniquement les copies et ne sont pas reflétées dans les arguments actuels Exemple: soit la fonction void increment(int value) { value += 1; }POO en C++: Fonctions 120 © 1997-2003 Fabio HERNANDEZ
  • 15. Passage des Arguments (suite) extern increment(int i); void main() { int counter=100; cout << "Before increment, counter is = " << counter << endl; increment(counter); cout << "After increment, counter is = " << counter << endl; } produit Before increment, counter is = 100 After increment, counter is = 100POO en C++: Fonctions 121 © 1997-2003 Fabio HERNANDEZ
  • 16. Passage des Arguments (suite) Le passage des arguments par valeur nest pas toujours souhaitable quand la fonction doit changer la valeur des arguments quand largument de la fonction est un objet de grande taille: le coût en temps et en mémoire de la copie serait très élevé Deux façons de passer les arguments par référence utilisation des pointeurs void increment(int* value) { *value += 1; } à linvocation, largument de la fonction est ladresse de lobjet et pas lobjet lui mêmePOO en C++: Fonctions 122 © 1997-2003 Fabio HERNANDEZ
  • 17. Passage des Arguments (suite) extern increment(int* value); void main() { int counter=100; cout << "Before increment, counter is = " << counter << endl; increment(&counter); // pass the address of count cout << "After increment, counter is = " << counter << endl; } produit Before increment, counter is = 100 After increment, counter is = 101POO en C++: Fonctions 123 © 1997-2003 Fabio HERNANDEZ
  • 18. Passage des Arguments (suite) Deux façons de passer les arguments par référence (suite) utilisation des références void increment(int& value) { value += 1; } void main() { int counter=100; cout << "Before increment, counter is = " << counter << endl; increment(counter); cout << "After increment, counter is = " << counter << endl; } produit Before increment, counter is = 100 After increment, counter is = 101POO en C++: Fonctions 124 © 1997-2003 Fabio HERNANDEZ
  • 19. Tableau comme Argument Les tableaux en C++ ne sont jamais passés par valeur Un tableau est passé comme un pointeur à son premier élément (celui de la position zéro) Conséquences: tout changement fait à un tableau à lintérieur dune fonction est effectué au tableau lui même et pas à une copie la taille du tableau (le nombre de positions) ne fait pas partie du type: la fonction ne connaît donc pas cette taillePOO en C++: Fonctions 125 © 1997-2003 Fabio HERNANDEZ
  • 20. Tableau comme Argument (suite) Exemple void printArray(int* array, int howmany) { cout << "["; for (int pos=0; pos < howmany; pos++) La taille du tableau cout << " " << array[pos]; est aussi un cout << " ]" << endl; paramètre } void incrementArray(int* array, int howmany) { for (int pos=0; pos < howmany; pos++) array[pos] += 100; }POO en C++: Fonctions 126 © 1997-2003 Fabio HERNANDEZ
  • 21. Tableau comme Argument (suite) Exemple (suite) void main() { const int MaxItems = 5; int itemTable[MaxItems]={5, 10, 15, 20, 25}; cout << "Originally, itemTable is: "; printArray(itemTable, MaxItems); incrementArray(itemTable, MaxItems); cout << "After increment, itemTable is: "; printArray(itemTable, MaxItems); } produit Originally, itemTable is: [ 5 10 15 20 25 ] After increment, itemTable is: [ 105 110 115 120 125 ]POO en C++: Fonctions 127 © 1997-2003 Fabio HERNANDEZ
  • 22. Tableau comme Argument (suite) Exemple (suite) La fonction printArray ne modifie pas le tableau passé en argument On devrait donc la définir de la façon suivante void printArray(const int* array, int howmany) { cout << "["; for (int pos=0; pos < howmany; pos++) cout << " " << array[pos]; cout << " ]" << endl; }POO en C++: Fonctions 128 © 1997-2003 Fabio HERNANDEZ
  • 23. Fonctions Inline Parfois le temps dexécution dune fonction est petit comparé au temps nécessaire pour appeler la fonction Le mot clé inline informe le compilateur quun appel à cette fonction peut être remplacé par le corps de la fonction Exemple inline int max(int a, int b) { return (a < b) ? b : a; } void main() { int m = max(134, 876); }POO en C++: Fonctions 129 © 1997-2003 Fabio HERNANDEZ
  • 24. Fonctions Inline (suite) Le compilateur génère le code équivalent à lexpansion de la fonction, comme si lon avait écrit void main() { int m = (134 < 876) ? 876 : 134; } Conséquences: programme plus rapide programme plus gros Les fonctions inline doivent être définies dans des fichiers dentête (.h) qui seront inclus dans des fichiers source (.cpp), pour que le compilateur puisse faire lexpansionPOO en C++: Fonctions 130 © 1997-2003 Fabio HERNANDEZ
  • 25. Portée des Variables Une définition de variable introduit un identificateur Il ne peut être utilisé que dans une partie du source du programme (portée) Une variable définie à lintérieur dune fonction (variable locale) peut être utilisée à partir de sa définition jusquà la fin du bloc où la définition apparaît void swap(int& a, int& b) { int temp = a; // temp is a local variable a = b; b = temp; }POO en C++: Fonctions 131 © 1997-2003 Fabio HERNANDEZ
  • 26. Portée des Variables (suite) Une variable définie en dehors dune fonction ou dune classe, (variable globale), est visible à partir de sa définition jusquà la fin du fichier source (.cpp) où sa définition apparaît Une variable peut être définie dans un bloc avec le même nom quun identificateur déjà existant: dans ce cas, cette variable cache la variable du bloc externe ou la variable globale qui porte le même nomPOO en C++: Fonctions 132 © 1997-2003 Fabio HERNANDEZ
  • 27. Portée des Variables (suite) Exemple int count; // global variable void dummy() { int count; // local count, hides global count = 100; // modifies local count while (count > 0) { // do something --count; } } void increment() { count += 1; // modifies global count }POO en C++: Fonctions 133 © 1997-2003 Fabio HERNANDEZ
  • 28. Durée de Vie des Variables Lors de lexécution du programme, chaque objet est créé quand sa définition apparaît et est détruit quand son identificateur sort de contexte En particulier, les variables locales sont créées (allocation de mémoire dans la pile dexécution) au moment de linvocation (activation) de la fonction Elles disparaissent quand la fonction finit son exécution Les variables(objets) globales sont créées et initialisées une seule fois et existent jusquà la fin de lexécution du programmePOO en C++: Fonctions 134 © 1997-2003 Fabio HERNANDEZ
  • 29. Durée de Vie des Variables (suite) A laide du mot clé static le programmeur peut définir une variable locale de façon à ce quelle existe jusquà la fin du programme Ce type des variables sont initialisées une seule fois Exemple void dummy() { static int count=1; // created and initialized // only once int local=100; // created and initialized // at each call cout << " local = " << local << << " count = " << count << endl; ++count; }POO en C++: Fonctions 135 © 1997-2003 Fabio HERNANDEZ
  • 30. Durée de Vie des Variables (suite) Exemple (suite) void main() { for (int i=0; i < 5; i++) dummy(); } produit local = 100 count = 1 local = 100 count = 2 local = 100 count = 3 local = 100 count = 4 local = 100 count = 5POO en C++: Fonctions 136 © 1997-2003 Fabio HERNANDEZ

×