Programmation Orientée Objet en C++  2ème Partie: Types des Données, Variables et                  Opérateurs             ...
Vue dEnsemble   Notions de base   Types, variables, opérateurs   Contrôle dexécution   Fonctions   Mémoire dynamique   Qua...
Table des Matières   Type des Données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arithmé...
Type des Données   Le type d’une variable détermine         la taille de la zone mémoire qui contient la valeur de la vari...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Types Fondamentaux   Booléen         bool         deux valeurs constantes de type bool: true et false   Entiers de tailles...
Types Fondamentaux (suite)   Entiers positifs         unsigned         char         unsigned         short         unsigne...
Types Fondamentaux (suite)   Taille de chaque type est dépendante du processeur   char, signed char et unsigned char sont ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Définition de Variables   Tout objet(variable) en C++ a une classe(type)   Définition du type de la variable est obligatoi...
Définition de Variables (suite)   Valide mais à éviter           float price, discount;   Plutôt           float price;   ...
Définition de Variables (suite)                      file1.cpp                           file2.cpp        float maxCapacit...
Définition de Variables (suite)   La définition de la variable implique une allocation de mémoire   La déclaration de la v...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Mots Réservés     asm                          enum             private                 true     auto                     ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Opérateurs Arithmétiques   Addition                                x+y   Soustraction                            x-y   Mul...
Opérateurs Arithmétiques (suite)   x++ est équivalent à x = x + 1   x++ signifie: prendre la valeur de x et après l’increm...
Opérateurs Relationnels   Le résultat est une valeur de vrai ou faux   faux est représenté par 0 (zéro)   vrai est représe...
Opérateurs Relationnels (suite)   Inférieur et inférieur égal           if (x      < y) {              //      do somethin...
Opérateurs Logiques   Négation         if ( !x ) {            // do something if x is equal to 0 (zero)         }      !x ...
Opérateurs Logiques (suite)   OU (inclusif) logique          if ( x || y ) {              // do something if at least one ...
Opérateurs Logiques Bit à Bit    Interprètent ses opérandes comme une collection ordonnée de    bits    Chaque bit peut co...
Opérateurs Logiques Bit à Bit (suite)    Déplacement vers la gauche                                                0   0  ...
Opérateurs Logiques Bit à Bit (suite)    Soit                                                0   1     1   0   0   1   0  ...
Ordre d’Evaluation des Opérateurs   Quel est le résultat de l’expression suivante?           4 + 3 * 4 / 2 + 2   16 si l’e...
Opérateurs d’Affectation   Pour changer la valeur d’une variable           short hour;           ...           hour = 18; ...
Opérateurs d’Affectation (suite)   L’opération           step = step + 20;  peut s’écrire aussi en utilisant l’opérateur d...
Opérateurs d’Affectation (suite)   Et pour les opérations logiques bit à bit           result       <<= 5;             // ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Types Dérivés   Dérivés des types fondamentaux et des types définis par le   programmeur   La dérivation se fait à l’aide ...
Types Dérivés : Pointeurs   Un pointeur contient l’adresse d’un objet en mémoire   L’objet pointé peut être référencé via ...
Types Dérivés : Pointeurs (suite)   Attention            int*       p, q; // WARNING: p is a pointer, q is an int   défini...
Types Dérivés : Pointeurs (suite)   Pour affecter une valeur à un pointeur                                                ...
Types Dérivés : Pointeurs (suite)    Pour modifier le contenu de la zone mémoire pointée par un    pointeur            *ra...
Types Dérivés : Pointeurs (suite)    Un pointeur peut recevoir ladresse d’un autre pointeur du    même type            int...
Types Dérivés : Pointeurs (suite)   Convention: si un pointeur est égal à 0 (zéro), il ne pointe nulle part   Obtenir la v...
Types Dérivés : Pointeurs (suite)   Exemple           #include <iostream>             // C++ I/O declarations           in...
Types Dérivés : Pointeurs (suite)   Les chaînes de caractères en C++ sont manipulées via des   pointeurs   Exemple        ...
Types Dérivés : Pointeurs (suite)   Arithmétique des pointeurs           char* bookTitle = "Le Petit Prince";           ch...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Constantes   Le mot réservé const ajouté à la définition d’un objet   empêche la modification de sa valeur   L’objet doit ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Enumérations   Alternative pour les constantes de type entier   Exemple           enum { Red, Green, Blue, Black, White };...
Enumérations (suite)   Utile lorsque le type bool n’est pas encore supporté par votre   compilateur           enum bool { ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Types Dérivés : Références   Une référence vers un objet est un alias vers l’objet   Un tant qu’alias, il doit être initia...
Types Dérivés : Tableaux    Un tableau est une collection d’objets du même type    Chacun de ces objet est accédé par sa p...
Types Dérivés : Tableaux (suite)   La dimension du tableau doit être connue en temps de   compilation           const int ...
Types Dérivés : Tableaux (suite)   Le langage ne garantit pas le contrôle de la validité d’une   position du tableau      ...
Types Dérivés : Tableaux (suite)   Pour accéder à un élément il faut spécifier ses coordonnées           matrix[2][1] = 18...
Tableaux et Pointeurs   L’identifieur d’un tableau est lui même un pointeur à la   première position           float angle...
Tableaux et Pointeurs (suite)   Attention, à la différence des autres pointeurs, sa valeur ne   peut pas être modifiée    ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Définition de Nouveaux Types   On peut définir un synonyme pour un type prédéfini (par le   langage ou par le programmeur)...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Conversion de Type   Consiste à modifier la façon d’interpreter la séquence de bits   contenue dans une variable   Convers...
Conversion de Type (suite)         dans les expressions arithmétiques, le type de taille supérieure         détermine le t...
Conversion de Type (suite)         l’inverse n’est pas vrai           name = aPointer;                // ERROR: different ...
Contrôle dAvancement   Type des données   Types Fondamentaux   Définition de Variables   Mots Réservés   Opérateurs (arith...
Prochain SlideShare
Chargement dans…5
×

Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++

2 004 vues

Publié le

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

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

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

Aucune remarque pour cette diapositive

Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++

  1. 1. Programmation Orientée Objet en C++ 2ème Partie: Types des Données, Variables et Opérateurs 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++: Types, Variables, Opérateurs 18 © 1997-2003 Fabio HERNANDEZ
  3. 3. Table des Matières Type des Données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 19 © 1997-2003 Fabio HERNANDEZ
  4. 4. Type des Données Le type d’une variable détermine la taille de la zone mémoire qui contient la valeur de la variable la signification de la séquence de bits en mémoire les opérations possibles sur une variable les instructions machine à utiliser pour certaines opérations On peut classer les types de données en types fondamentaux types dérivésPOO en C++: Types, Variables, Opérateurs 20 © 1997-2003 Fabio HERNANDEZ
  5. 5. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 21 © 1997-2003 Fabio HERNANDEZ
  6. 6. Types Fondamentaux Booléen bool deux valeurs constantes de type bool: true et false Entiers de tailles différentes char (1 octet) short int ou short (2 octets) int (2 ou 4 octets) long int ou long (4 ou 8 octets) Valeurs en virgule flottante float (4 octets) double (8 octets) long double (10 ou plus octets)POO en C++: Types, Variables, Opérateurs 22 © 1997-2003 Fabio HERNANDEZ
  7. 7. Types Fondamentaux (suite) Entiers positifs unsigned char unsigned short unsigned int unsigned long Entiers avec signe signed char signed short ≅ short signed int ≅ int signed long ≅ long Pour avoir la plage des valeurs pour chaque type, voir les fichiers limits.h pour les types entiers float.h pour les types en virgule flottantePOO en C++: Types, Variables, Opérateurs 23 © 1997-2003 Fabio HERNANDEZ
  8. 8. Types Fondamentaux (suite) Taille de chaque type est dépendante du processeur char, signed char et unsigned char sont trois types différents sizeof retourne la taille en octets d’un type ou d’une variable cout << "The size of an int on this platform is " << sizeof(int) << " bytes" << endl; Sur toutes les plate-formes il est garanti 1=sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) sizeof(float) <= sizeof(double) <= sizeof(long double) sizeof(Type) = sizeof(signed Type) = sizeof(unsigned Type) où Type = char, short, int ou longPOO en C++: Types, Variables, Opérateurs 24 © 1997-2003 Fabio HERNANDEZ
  9. 9. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 25 © 1997-2003 Fabio HERNANDEZ
  10. 10. Définition de Variables Tout objet(variable) en C++ a une classe(type) Définition du type de la variable est obligatoire int numHits; float ratio; L’identificateur de la variable(son nom) est composé de lettres, chiffres et le caractère ‘_’ (souligné) Les noms des variables peuvent commencer par une lettre ou par ‘_’ (souligné), mais pas par "__" (double souligné ) "__" au début du nom est réservé aux variables/fonctions du système Pas de limitation imposée par le langage sur la longueur de l’identificateur; le compilateur limite en général à 256POO en C++: Types, Variables, Opérateurs 26 © 1997-2003 Fabio HERNANDEZ
  11. 11. Définition de Variables (suite) Valide mais à éviter float price, discount; Plutôt float price; float discount; Majuscules et minuscules sont différenciées float distance; int Distance; // WARNING: "Distance" and "distance" // are two different variables Valeur initiale indéterminée On peut donner une valeur initiale lors de la définition unsigned int minDistance = 15; double angle = 245.38; float seed = random();POO en C++: Types, Variables, Opérateurs 27 © 1997-2003 Fabio HERNANDEZ
  12. 12. Définition de Variables (suite) file1.cpp file2.cpp float maxCapacity; extern float maxCapacity; float limit = maxCapacity*0.90; Si la variable est définie dans un autre module il faut la déclarer avant de l’utiliser extern float maxCapacity; // declaration float limit = maxCapacity*0.90; // usagePOO en C++: Types, Variables, Opérateurs 28 © 1997-2003 Fabio HERNANDEZ
  13. 13. Définition de Variables (suite) La définition de la variable implique une allocation de mémoire La déclaration de la variable informe au compilateur que la variable existe et est définie ailleurs. Donc, pas d’allocation de mémoire nécessaire La définition (déclaration) de la variable doit paraître avant sa première utilisation, mais pas forcément avant la première instruction exécutable int offset = 200; .... offset = offset + 15; .... int step = offset; Généralement on fait la définition (déclaration) de la variable juste avant sa première utilisationPOO en C++: Types, Variables, Opérateurs 29 © 1997-2003 Fabio HERNANDEZ
  14. 14. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 30 © 1997-2003 Fabio HERNANDEZ
  15. 15. Mots Réservés asm enum private true auto explicit protected try break export public typedef case extern typeid register catch float typename reinterpret_cast char for union return class friend short Unsigned Const goto signed using const_cast if sizeof virtual continue inline default static void int delete long static_cast volatile do mutable struct wchar_t double namespace switch while dynamic_cast new template else operator this throwPOO en C++: Types, Variables, Opérateurs 31 © 1997-2003 Fabio HERNANDEZ
  16. 16. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 32 © 1997-2003 Fabio HERNANDEZ
  17. 17. Opérateurs Arithmétiques Addition x+y Soustraction x-y Multiplication x*y Division x/y Modulo x%y Plus Unaire +x Minus Unaire -x Post-incrément x++ Pre-incrément ++x Post-décrément x-- Pre-décrément --xPOO en C++: Types, Variables, Opérateurs 33 © 1997-2003 Fabio HERNANDEZ
  18. 18. Opérateurs Arithmétiques (suite) x++ est équivalent à x = x + 1 x++ signifie: prendre la valeur de x et après l’incrementer ++x signifie: incrementer x et après prendre sa valeur Exemple int x=0; cout << "1. x: " << x << endl; cout << "2. x: " << x++ << endl; cout << "3. x: " << x << endl; cout << "4. x: " << ++x << endl; cout << "5. x: " << x << endl; Produit 1. x: 0 2. x: 0 3. x: 1 4. x: 2 5. x: 2 Analogue pour x-- et --xPOO en C++: Types, Variables, Opérateurs 34 © 1997-2003 Fabio HERNANDEZ
  19. 19. Opérateurs Relationnels Le résultat est une valeur de vrai ou faux faux est représenté par 0 (zéro) vrai est représenté par une valeur différente de zéro Opérateur d’égalité if (x == y) { // do something when x equals y } Attention: erreur TRES courante if (x = y) // ERROR: This is assignement instead of a comparison Opérateur d’inégalité if (x != y) { // do something when x is different from y }POO en C++: Types, Variables, Opérateurs 35 © 1997-2003 Fabio HERNANDEZ
  20. 20. Opérateurs Relationnels (suite) Inférieur et inférieur égal if (x < y) { // do something when x is less than y } if (x <= y) { // do something when x is less than or equal to y } Supérieur et supérieur égal if (x > y) { // do something when x is greater than y } if (x >= y) { // do something when x is greater than or equal to y }POO en C++: Types, Variables, Opérateurs 36 © 1997-2003 Fabio HERNANDEZ
  21. 21. Opérateurs Logiques Négation if ( !x ) { // do something if x is equal to 0 (zero) } !x produit la valeur 1 si x est égal a zéro et 0 si x est différent de 0 ET logique if ( x && y ) { // do something if x and y are both different // from zero } Le résultat de x && y est égal à 1 si x et y ont toutes les deux une valeur différente de 0 L’expression est évaluée de gauche à droite et uniquement le nombre de composants nécessaires pour déterminer sa valeur de vérité sont évaluésPOO en C++: Types, Variables, Opérateurs 37 © 1997-2003 Fabio HERNANDEZ
  22. 22. Opérateurs Logiques (suite) OU (inclusif) logique if ( x || y ) { // do something if at least one of x or y is // different from zero } Le résultat de x || y est égal à 1 si x ou y ou les deux ont une valeur différente de 0 L’expression est évaluée de gauche à droite et uniquement le nombre de composants nécessaires pour déterminer sa valeur de vérité sont évaluésPOO en C++: Types, Variables, Opérateurs 38 © 1997-2003 Fabio HERNANDEZ
  23. 23. Opérateurs Logiques Bit à Bit Interprètent ses opérandes comme une collection ordonnée de bits Chaque bit peut contenir une valeur de 0 (zéro) ou 1 Utiles pour effectuer des manipulations au niveau des bits Les opérandes doivent être de type (signed ou unsigned) char, short, int ou long Négation bit à bit unsigned char bitSet = 33; 0 0 1 0 0 0 0 1 bitSet = ~bitSet; 1 1 0 1 1 1 1 0POO en C++: Types, Variables, Opérateurs 39 © 1997-2003 Fabio HERNANDEZ
  24. 24. Opérateurs Logiques Bit à Bit (suite) Déplacement vers la gauche 0 0 0 0 0 0 0 1 unsigned char bitSet = 1; bitSet = bitSet << 2; 0 0 0 0 0 1 0 0 Déplacement vers la droite bitSet = bitSet >> 1; 0 0 0 0 0 0 1 0 ET bit à bit 0 1 1 0 0 1 0 1 unsigned char bitSet = 101; unsigned char mask = 175; 1 0 1 0 1 1 1 1 unsigned char result = bitSet & mask; 0 0 1 0 0 1 0 1POO en C++: Types, Variables, Opérateurs 40 © 1997-2003 Fabio HERNANDEZ
  25. 25. Opérateurs Logiques Bit à Bit (suite) Soit 0 1 1 0 0 1 0 1 unsigned char bitSet = 101; unsigned char mask = 175; 1 0 1 0 1 1 1 1 OU inclusif bit à bit unsigned char result = bitSet | mask; 1 1 1 0 1 1 1 1 OU exclusif bit à bit unsigned char result = bitSet ^ mask; 1 1 0 0 1 0 1 0POO en C++: Types, Variables, Opérateurs 41 © 1997-2003 Fabio HERNANDEZ
  26. 26. Ordre d’Evaluation des Opérateurs Quel est le résultat de l’expression suivante? 4 + 3 * 4 / 2 + 2 16 si l’expresssion est évaluée de gauche à droite Le résultat correct est 12 3*4 12 12/2 6 4+6 10 10+2 12 Multiplication et division sont prioritaires par rapport à l’addition et soustraction, donc évaluées avant Conclusion: utilisez les parenthèses lorsque une expression comprend plusieurs types d’opérateurs ((price-discount)*numItems)/numMonthsPOO en C++: Types, Variables, Opérateurs 42 © 1997-2003 Fabio HERNANDEZ
  27. 27. Opérateurs d’Affectation Pour changer la valeur d’une variable short hour; ... hour = 18; Le résultat de l’opération d’affectation est la valeur de l’expression à droite de ‘=‘ Le type du résultat est le type de l’opérande de gauche On peut faire une série d’affectations en une seule expression int i; int j; i = j = 1024; Evaluation de la droite vers la gauchePOO en C++: Types, Variables, Opérateurs 43 © 1997-2003 Fabio HERNANDEZ
  28. 28. Opérateurs d’Affectation (suite) L’opération step = step + 20; peut s’écrire aussi en utilisant l’opérateur d’addition et affectation += step += 20; Similairement pour les autres opérations arithmétiques step -= 20; // subtract assignement step *= 20; // multiply assignement step /= 20; // divide assignement step %= 20; // modulus assignementPOO en C++: Types, Variables, Opérateurs 44 © 1997-2003 Fabio HERNANDEZ
  29. 29. Opérateurs d’Affectation (suite) Et pour les opérations logiques bit à bit result <<= 5; // bitwise shift left result >>= 5; // bitwise shift right result &= mask; // bitwise AND result |= mask; // bitwise inclusive OR result ^= mask; // bitwise exclusive OR (XOR)POO en C++: Types, Variables, Opérateurs 45 © 1997-2003 Fabio HERNANDEZ
  30. 30. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 46 © 1997-2003 Fabio HERNANDEZ
  31. 31. Types Dérivés Dérivés des types fondamentaux et des types définis par le programmeur La dérivation se fait à l’aide d’opérateurs de déclaration Quatre types de dérivation pointeur référence tableau fonctionPOO en C++: Types, Variables, Opérateurs 47 © 1997-2003 Fabio HERNANDEZ
  32. 32. Types Dérivés : Pointeurs Un pointeur contient l’adresse d’un objet en mémoire L’objet pointé peut être référencé via le pointeur Utilisation typique: manipulation des objet alloués dynamiquement (pendant l’exécution du programme), création et manipulation de structures chaînées, etc. Exemple int* pointerToAnInt; double* pointerToADouble; Peut s’écrire aussi int *pointerToAnInt;POO en C++: Types, Variables, Opérateurs 48 © 1997-2003 Fabio HERNANDEZ
  33. 33. Types Dérivés : Pointeurs (suite) Attention int* p, q; // WARNING: p is a pointer, q is an int définit p comme un pointeur à un entier, et q comme un entier!!! Faites plutôt int* p; int* q; La taille mémoire d’un pointeur est la quantité d’octets nécessaire pour stocker une adresse mémoire dépendante du matériel. En conséquence, un pointeur à un int aura la même taille qu’un pointeur à un double Lexpression sizeof(int*) retourne cette taillePOO en C++: Types, Variables, Opérateurs 49 © 1997-2003 Fabio HERNANDEZ
  34. 34. Types Dérivés : Pointeurs (suite) Pour affecter une valeur à un pointeur Extraction de double ratio = 45.2; ladresse mémoire double* ratioPtr = &ratio; de ratio L’opérateur & extrait l’adresse mémoire de la variable qui le suit (ratio) Résultat ratio ratioPtrsizeof(double*) 45.2 sizeof(double)POO en C++: Types, Variables, Opérateurs 50 © 1997-2003 Fabio HERNANDEZ
  35. 35. Types Dérivés : Pointeurs (suite) Pour modifier le contenu de la zone mémoire pointée par un pointeur *ratioPtr = 250.3; // equivalent to ratio = 250.3; Résultat ratio ratioPtrsizeof(double*) 250.3 sizeof(double) On peut aussi écrire double offset; ..... *ratioPtr += 126.5 + offset; ..... double finalResult = *ratioPtr + 0.20;POO en C++: Types, Variables, Opérateurs 51 © 1997-2003 Fabio HERNANDEZ
  36. 36. Types Dérivés : Pointeurs (suite) Un pointeur peut recevoir ladresse d’un autre pointeur du même type int count = 1024; int* countPtr = &count; int* anotherCountPtr = countPtr; Résultat countPtr count sizeof(int*) 1024 sizeof(int) anotherCountPtr sizeof(int*)POO en C++: Types, Variables, Opérateurs 52 © 1997-2003 Fabio HERNANDEZ
  37. 37. Types Dérivés : Pointeurs (suite) Convention: si un pointeur est égal à 0 (zéro), il ne pointe nulle part Obtenir la valeur d’un pointeur qui pointe nulle part est une erreur (segmentation fault in UNIX) int* aPointer=0; *aPointer = 125; // ERROR: segmentation fault Il faut toujours lui affecter une valeur initiale ou tester sa valeur avant d’extraire la valeur pointée par lui int* aPointer; if (aPointer == 0) { // It points nothing } else { // it points somewhere }POO en C++: Types, Variables, Opérateurs 53 © 1997-2003 Fabio HERNANDEZ
  38. 38. Types Dérivés : Pointeurs (suite) Exemple #include <iostream> // C++ I/O declarations int main() { int hitCounter = 200; int* hitCounterPtr; if (hitCounterPtr == 0) { cout << "hitCounterPtr is initially 0" << endl; hitCounterPtr = &hitCounter; *hitCounterPtr += 100; } cout << "hitCounter = " << hitCounter << "*hitCounterPtr = " << *hitCounterPtr << endl; return 0; }POO en C++: Types, Variables, Opérateurs 54 © 1997-2003 Fabio HERNANDEZ
  39. 39. Types Dérivés : Pointeurs (suite) Les chaînes de caractères en C++ sont manipulées via des pointeurs Exemple char* bookTitle = "Le Petit Prince"; bookTitle: L e P e t i t P r i n c e 0 La fin de la chaîne est marquée par le caractère ‘0’(zéro)POO en C++: Types, Variables, Opérateurs 55 © 1997-2003 Fabio HERNANDEZ
  40. 40. Types Dérivés : Pointeurs (suite) Arithmétique des pointeurs char* bookTitle = "Le Petit Prince"; char* secondWord = bookTitle + 3; cout << *bookTitle << endl; // prints: L cout << bookTitle << endl; // prints: Le Petit Prince cout << *secondWord << end; // prints: P cout << secondWord << end; // prints: Petit Prince bookTitle: L e P e t i t P r i n c e 0 secondWord:POO en C++: Types, Variables, Opérateurs 56 © 1997-2003 Fabio HERNANDEZ
  41. 41. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 57 © 1997-2003 Fabio HERNANDEZ
  42. 42. Constantes Le mot réservé const ajouté à la définition d’un objet empêche la modification de sa valeur L’objet doit être initialisé lors de la définition La violation de cette règle est détectée lors de la compilation Exemple const int maxEntries = 150; maxEntries = 200; // ERROR: maxEntries is a constant Pointeurs vers constantes const char* stringPtr = "this is a string"; *stringPtr = ‘T’; // ERROR: stringPtr is a constantPOO en C++: Types, Variables, Opérateurs 58 © 1997-2003 Fabio HERNANDEZ
  43. 43. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 59 © 1997-2003 Fabio HERNANDEZ
  44. 44. Enumérations Alternative pour les constantes de type entier Exemple enum { Red, Green, Blue, Black, White }; Equivaut à const int Red = 0; const int Green = 1; ... const int White = 4; Une énumération peut-être nommée enum Color { Red, Green, Blue, Black, White }; Color background = Black; Color foreground; .... if (background == Black) foreground = White;POO en C++: Types, Variables, Opérateurs 60 © 1997-2003 Fabio HERNANDEZ
  45. 45. Enumérations (suite) Utile lorsque le type bool n’est pas encore supporté par votre compilateur enum bool { false=0, true=1 }; bool isNull = false; char* aPointer; if (aPointer == 0) isNull = true;POO en C++: Types, Variables, Opérateurs 61 © 1997-2003 Fabio HERNANDEZ
  46. 46. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 62 © 1997-2003 Fabio HERNANDEZ
  47. 47. Types Dérivés : Références Une référence vers un objet est un alias vers l’objet Un tant qu’alias, il doit être initialisé avec l’objet référencé int target = 15; int& refToTarget = target; Toute opération effectuée via la référence affecte l’objet référencé refToTarget = 500; // target has now the value 500 int half = refToTarget/2; // half is 250 Très utile pour le passage des paramètres aux fonctions (plus tard)POO en C++: Types, Variables, Opérateurs 63 © 1997-2003 Fabio HERNANDEZ
  48. 48. Types Dérivés : Tableaux Un tableau est une collection d’objets du même type Chacun de ces objet est accédé par sa position Définition d’un tableau de 10 entiers int table[10]; Les éléments du tableau sont indexés à partir de la position 0 table 0 1 2 3 4 5 6 7 8 9 sizeof(int) Pour accéder à la valeur dans la position 4 du tableau table[4] = 800; table[4] *= 2; int count = table[4];POO en C++: Types, Variables, Opérateurs 64 © 1997-2003 Fabio HERNANDEZ
  49. 49. Types Dérivés : Tableaux (suite) La dimension du tableau doit être connue en temps de compilation const int numPorts = 200; double portTable[numPorts]; // OK int bufferSize; char buffer[bufferSize]; // ERROR: the value of // bufferSize is unknown Le tableau peut être initialisé lors de la définition int groupTable[3] = {134, 85, 29}; int userTable[] = {10, 74, 43, 45, 89}; // 5 positions Pour initialiser un tableau, il faut donner une valeur à chaque élément (exemple plus tard)POO en C++: Types, Variables, Opérateurs 65 © 1997-2003 Fabio HERNANDEZ
  50. 50. Types Dérivés : Tableaux (suite) Le langage ne garantit pas le contrôle de la validité d’une position du tableau int array[5]; array[10] = 555; // Runtime ERROR: array has only // 5 elements Tableaux de plusieurs dimensions const int numRows = 4; const int numColumns = 3; int matrix[numRows][numColumns]; 0 1 2 0 1 matrix: 2 3POO en C++: Types, Variables, Opérateurs 66 © 1997-2003 Fabio HERNANDEZ
  51. 51. Types Dérivés : Tableaux (suite) Pour accéder à un élément il faut spécifier ses coordonnées matrix[2][1] = 18; 0 1 2 0 1 matrix: 2 18 3POO en C++: Types, Variables, Opérateurs 67 © 1997-2003 Fabio HERNANDEZ
  52. 52. Tableaux et Pointeurs L’identifieur d’un tableau est lui même un pointeur à la première position float angleTable[4] = {23.0, 45.8, 123.9, 54.7}; Pour modifier la valeur du premier élément, on peut écrire angleTable[0] = 222.9; et aussi Modification du premier élément *angleTable = 222.9; du tableau et du quatrième angleTable angleTable[3] = 90.0; *(angleTable+3) = 90.0; Il est préférable d’utiliser la notation avec index pour les tableauxPOO en C++: Types, Variables, Opérateurs 68 © 1997-2003 Fabio HERNANDEZ
  53. 53. Tableaux et Pointeurs (suite) Attention, à la différence des autres pointeurs, sa valeur ne peut pas être modifiée float angleTable[4]; float* aPointer; angleTable = aPointer; // ERROR: angleTable is an // arrayPOO en C++: Types, Variables, Opérateurs 69 © 1997-2003 Fabio HERNANDEZ
  54. 54. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 70 © 1997-2003 Fabio HERNANDEZ
  55. 55. Définition de Nouveaux Types On peut définir un synonyme pour un type prédéfini (par le langage ou par le programmeur) à l’aide du mot clé typedef typedef float Angle; Le nouveau type Angle peut être utilisé pour définir variables Angle rotation = 234.78; Toutes les opérations valides avec le type original le sont aussi avec le synonyme Angle rotation = "white"; // ERROR: Angle is float // not char*POO en C++: Types, Variables, Opérateurs 71 © 1997-2003 Fabio HERNANDEZ
  56. 56. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 72 © 1997-2003 Fabio HERNANDEZ
  57. 57. Conversion de Type Consiste à modifier la façon d’interpreter la séquence de bits contenue dans une variable Conversion implicite faite automatiquement par le compilateur (non sans warnings) lorsque plusieurs types de données sont impliqués dans une opération lors de l’affectation d’une valeur à un objet, le type de la valeur est modifié au type de l’objet int count = 5.890; // conversion to int 5 chaque paramètre passé à une fonction est modifié au type de l’argument espéré par la fonction extern int add(int first, int second); count = add(6.41, 10); // conversion to int 6POO en C++: Types, Variables, Opérateurs 73 © 1997-2003 Fabio HERNANDEZ
  58. 58. Conversion de Type (suite) dans les expressions arithmétiques, le type de taille supérieure détermine le type de conversion int count = 3; count + 5.8978; // conversion to double 3.0 + 5.8978 exemple de plusieurs conversions int count = 10; count = count * 2.3; // Conversion to 10.0*2.3 // Conversion de 23.0 a int 23 résultat identique pour count *= 2.3; // count is now 23 not 20 tout pointeur à une valeur non constante de n’importe quel type, peut être affecté à un pointeur de type void* char* name = 0; void* aPointer = name; // implicit conversionPOO en C++: Types, Variables, Opérateurs 74 © 1997-2003 Fabio HERNANDEZ
  59. 59. Conversion de Type (suite) l’inverse n’est pas vrai name = aPointer; // ERROR: different pointer types Conversion explicite ou casting demandée par le programmeur exemple int result = 34; result = result + static_cast<int>(10.890); peut être aussi écrit result = result + int(10.890); // old style notation permet d’utiliser des pointeur génériques (au risque du programmeur) char* name; void* genericPointer; name = (char*)genericPointer; // explicit conversionPOO en C++: Types, Variables, Opérateurs 75 © 1997-2003 Fabio HERNANDEZ
  60. 60. Contrôle dAvancement Type des données Types Fondamentaux Définition de Variables Mots Réservés Opérateurs (arithmétiques, relationnels, logiques, d’affectation) Types Dérivés (pointeurs) Constantes Enumerations Types Dérivés (références, tableaux) Définition de Nouveaux Types Conversion de TypePOO en C++: Types, Variables, Opérateurs 76 © 1997-2003 Fabio HERNANDEZ

×