Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++

1 097 vues

Publié le

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

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 097
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
135
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++

  1. 1. Programmation Orientée Objet en C++ 3ème Partie: Instructions de Contrôle d’Exécution Fabio Hernandez Fabio.Hernandez@in2p3.fr
  2. 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++: Contrôle d’Exécution 78 © 1997-2003 Fabio HERNANDEZ
  3. 3. Table des Matières Instructions de Sélection (if, switch) Instructions d’Itération (while, for, do) Instruction de Rupture (break, continue)POO en C++: Contrôle d’Exécution 79 © 1997-2003 Fabio HERNANDEZ
  4. 4. Instructions de Sélection: if Forme générale if (condition) instruction if (condition) { instruction 1 instruction 2 .... instruction n }POO en C++: Contrôle d’Exécution 80 © 1997-2003 Fabio HERNANDEZ
  5. 5. Instructions de Sélection: if (suite) Forme générale (suite) if (condition) instruction 1 else instruction 2 if (condition) { instruction 1 .... instruction n } else { instruction 1 .... instruction n }POO en C++: Contrôle d’Exécution 81 © 1997-2003 Fabio HERNANDEZ
  6. 6. Instructions de Sélection: if (suite) Exemples une seule instruction if (temperature > 50.0) cout << "this is getting HOT..." << endl; plusieurs instructions if (temperature > 90.0) { threshold = temperature; cout << "WARNING: evacuation is inminent" << endl; }POO en C++: Contrôle d’Exécution 82 © 1997-2003 Fabio HERNANDEZ
  7. 7. Instructions de Sélection: if (suite) La condition est une expression qui produit une valeur de faux (zéro) ou vraie(non zéro) Un entier ou un pointeur peuvent être utilisés comme conditions Exemple int count; if (count){ // do something } est équivalent à if (count != 0) { // do something } De façon similaire pour les pointeurs int* aPointer; if (aPointer) // equivalent to if (aPointer != 0) // do somethingPOO en C++: Contrôle d’Exécution 83 © 1997-2003 Fabio HERNANDEZ
  8. 8. Instructions de Sélection: if (suite) Rappel 1: les expressions comprenant des opérateurs logiques && (ET) et || (OU) sont évaluées de gauche à droite et uniquement le nombre de composants nécessaires pour déterminer la valeur de vérité de la condition sont évalués Rappel 2: on ne peut pas déréférencer un pointer nul On peut donc écrire int* aPointer; if (aPointer && (*aPointer > 100)) { // do something } Si aPointer == 0 la deuxième partie de la condition n’est pas évaluéePOO en C++: Contrôle d’Exécution 84 © 1997-2003 Fabio HERNANDEZ
  9. 9. Instructions de Sélection: if (suite) Parfois un if simple comme if (a <= b) min = a; else min = b; peut être mieux exprimé par min = (a <= b) ? a : b; à utiliser uniquement pour des expressions simples autrement, le code peut devenir illisiblePOO en C++: Contrôle d’Exécution 85 © 1997-2003 Fabio HERNANDEZ
  10. 10. Instructions de Sélection: switch Une suite de if...else peut être écrite plus simplement à l’aide de l’instruction switch Exemple: déterminer le nombre d’occurrences des lettres ‘a’ et ‘e’ dans un texte Avec if char letter; int aCounter=0; int eCounter=0; int other=0; ... if (letter == ‘a’) ++aCounter; else if (letter == ‘e’) ++eCounter; else ++other;POO en C++: Contrôle d’Exécution 86 © 1997-2003 Fabio HERNANDEZ
  11. 11. Instructions de Sélection: switch (suite) Avec switch switch (letter) { case ‘a’: ++aCounter; break; case ‘e’: ++eCounter; break; default: ++other; break; }POO en C++: Contrôle d’Exécution 87 © 1997-2003 Fabio HERNANDEZ
  12. 12. Instructions de Sélection: switch (suite) Exemple: déterminer le nombre de voyelles dans un texte int vowelCounter = 0; int other = 0; switch (letter) { case ‘a’: case ‘e’: case ‘i’: case ‘o’: case ‘u’: ++vowelCounter; break; default: ++other; break; }POO en C++: Contrôle d’Exécution 88 © 1997-2003 Fabio HERNANDEZ
  13. 13. Instructions de Sélection: switch (suite) Attention: chaque entrée case dans un switch doit être delimitée, autrement l’execution continue sequentiellement Exemple int value; .... switch (value) { // WARNING: no break case 1: cout << "entering case 1" << endl; case 2: cout << "entering case 2" << endl; default: cout << "unknown value" << endl; }POO en C++: Contrôle d’Exécution 89 © 1997-2003 Fabio HERNANDEZ
  14. 14. Instructions de Sélection: switch (suite) Si au moment d’executer le switch, la valeur de value est 1, le résultat est entering case 1 entering case 2 unknown valuePOO en C++: Contrôle d’Exécution 90 © 1997-2003 Fabio HERNANDEZ
  15. 15. Instructions de Sélection: switch (suite) Comparez contre int value; .... switch (value) { case 1: cout << "entering case 1" << endl; break; case 2: cout << "entering case 2" << endl; break; default: cout << "unknown value" << endl; break; }POO en C++: Contrôle d’Exécution 91 © 1997-2003 Fabio HERNANDEZ
  16. 16. Contrôle dAvancement Instructions de Sélection (if, switch) Instructions d’Itération (while, for, do) Instruction de Rupture (break, continue)POO en C++: Contrôle d’Exécution 92 © 1997-2003 Fabio HERNANDEZ
  17. 17. Instructions d’Itération: while Forme générale while (condition) instruction while (condition) { instruction 1 ... instruction n } Séquence dexécution: evaluation de la condition exécution des instructions du corps si la condition est vraie Si la première évaluation de la condition donne faux, les instructions du corps ne sont jamais exécutéesPOO en C++: Contrôle d’Exécution 93 © 1997-2003 Fabio HERNANDEZ
  18. 18. Instructions d’Itération: while (suite) Etant donné: typedef float Temperature; const int NumRooms = 100; Temperature room[NumRooms]; Exemple 1: donner une valeur initiale à toutes les positions du tableau room Solution 1: int roomNumber=0; const Temperature InitialTemp = 15.0; while (roomNumber < NumRooms) { room[roomNumber] = InitialTemp; roomNumber += 1; }POO en C++: Contrôle d’Exécution 94 © 1997-2003 Fabio HERNANDEZ
  19. 19. Instructions d’Itération: while (suite) Solution 2 while (roomNumber < NumRooms) { room[roomNumber] = InitialTemp; roomNumber++; } Solution 3 while (roomNumber < NumRooms) room[roomNumber++] = InitialTemp;POO en C++: Contrôle d’Exécution 95 © 1997-2003 Fabio HERNANDEZ
  20. 20. Instructions d’Itération: while (suite) Exemple 2: chercher les valeurs maximum et minimum dans le tableau room #include <float.h> int roomNumber=0; Temperature max = FLT_MIN; Temperature min = FLT_MAX; while (roomNumber < NumRooms) { if (room[roomNumber] > max) max = room[roomNumber]; else if (room[roomNumber] < min) min = room[roomNumber]; roomNumber++; }POO en C++: Contrôle d’Exécution 96 © 1997-2003 Fabio HERNANDEZ
  21. 21. Instructions d’Itération: for Forme générale for (init-expresssion; condition; expression) instruction for (init-expresssion; condition; expression) { instruction 1 ... instruction n } init-expression est executé une fois avant de commencer la boucle si l’évaluation de condition est vraie le corps du for est exécuté expression est executé à chaque itération, après le corpsPOO en C++: Contrôle d’Exécution 97 © 1997-2003 Fabio HERNANDEZ
  22. 22. Instructions d’Itération: for (suite) La condition doit être évaluée vrai après l’exécution de init- expression pour que la boucle soit exécutée au moins une fois Exemples: etant donné: typedef float Temperature; const int NumRooms = 100; Temperature room[NumRooms]; Exemple 1: donner une valeur initiale à toutes les positions du tableau room Solution 1: int roomNumber; const Temperature InitialTemp = 15.0; for (roomNumber=0; roomNumber < NumRooms; ++roomNumber) room[roomNumber] = InitialTemp;POO en C++: Contrôle d’Exécution 98 © 1997-2003 Fabio HERNANDEZ
  23. 23. Instructions d’Itération: for (suite) Exemple 2: chercher les valeurs maximum et minimum dans le tableau room Solution 1 #include <float.h> int roomNumber; Temperature max = FLT_MIN; Temperature min = FLT_MAX; for(roomNumber=0; roomNumber < NumRooms; ++roomNumber){ if (room[roomNumber] > max) max = room[roomNumber]; else if (room[roomNumber] < min) min = room[roomNumber]; }POO en C++: Contrôle d’Exécution 99 © 1997-2003 Fabio HERNANDEZ
  24. 24. Instructions d’Itération: for (suite) Une boucle sans fin peut être écrite for (;;) { // do something forever } init-expression et expression peuvent être composées de plusieurs instructions, comme dans... for (i=0, j=100; array[i] < max; i++, j--) ...ou peuvent ne pas exister int i=0; int j=100; for (; array[i] < max; i++, j--) // null init-expressionPOO en C++: Contrôle d’Exécution 100 © 1997-2003 Fabio HERNANDEZ
  25. 25. Instructions d’Itération: do Forme générale do { instruction 1 ... instruction n } while (condition); La condition est évaluée après l’exécution du corps La boucle est donc exécutée au moins une foisPOO en C++: Contrôle d’Exécution 101 © 1997-2003 Fabio HERNANDEZ
  26. 26. Contrôle dAvancement Instructions de Sélection (if, switch) Instructions d’Itération (while, for, do) Instruction de Rupture (break, continue)POO en C++: Contrôle d’Exécution 102 © 1997-2003 Fabio HERNANDEZ
  27. 27. Instructions de Rupture: break Termine l’exécution du for, while, do ou switch le plus interne L’exécution reprend immediatement après le bloc terminé Exemple: déterminer l’occurrence d’une valeur particulière dans un tableau; si trouvé écrire sa position const int ArraySize = 200; int array[ArraySize]; const int Target = 3456; int i; ..... for (i=0; i < ArraySize; i++) if (array[i] == Target) Rupture break; dexécution de la if (i == ArraySize) boucle cout << "Not found" << endl; else cout << "Target found at position " << i << endl;POO en C++: Contrôle d’Exécution 103 © 1997-2003 Fabio HERNANDEZ
  28. 28. Instructions de Rupture: continue Termine l’exécution de l’itération courante du for, while ou do le plus interne Dans le cas du while et do, l’exécution reprend avec l’évaluation de la condition Dans le cas du for, l’exécution reprend avec l’exécution de expressionPOO en C++: Contrôle d’Exécution 104 © 1997-2003 Fabio HERNANDEZ
  29. 29. Instructions de Rupture: continue (suite) Exemple: modifier toutes les positions d’un tableau si sa valeur se trouve dans un intervalle donné const int ArraySize = 200; int array[ArraySize]; const int Start = 5000; const int End = 10000; ..... for (int i=0; i < ArraySize; i++) { // Do we need to modify this value? if ((array[i] < Start) || (array[i] > End)) continue; // nothing to do with this position // modify this position array[i] /= 2; }POO en C++: Contrôle d’Exécution 105 © 1997-2003 Fabio HERNANDEZ
  30. 30. Contrôle dAvancement Instructions de Sélection (if, switch) Instructions d’Itération (while, for, do) Instruction de Rupture (break, continue)POO en C++: Contrôle d’Exécution 106 © 1997-2003 Fabio HERNANDEZ

×