SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Programmation Orientée Objet en C++
  2ème Partie: Types des Données, Variables et
                  Opérateurs


                 Fabio Hernandez
               Fabio.Hernandez@in2p3.fr
Vue d'Ensemble
   Notions de base
   Types, variables, opérateurs
   Contrôle d'exé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/sortie


POO en C++: Types, Variables, Opérateurs    18         © 1997-2003 Fabio HERNANDEZ
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 Type

POO en C++: Types, Variables, Opérateurs   19           © 1997-2003 Fabio HERNANDEZ
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és




POO en C++: Types, Variables, Opérateurs   20                 © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   21           © 1997-2003 Fabio HERNANDEZ
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
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 flottante


POO en C++: Types, Variables, Opérateurs   23          © 1997-2003 Fabio HERNANDEZ
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 long




POO en C++: Types, Variables, Opérateurs   24        © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   25           © 1997-2003 Fabio HERNANDEZ
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 à 256

POO en C++: Types, Variables, Opérateurs   26      © 1997-2003 Fabio HERNANDEZ
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
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; // usage
POO en C++: Types, Variables, Opérateurs   28               © 1997-2003 Fabio HERNANDEZ
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 utilisation
POO en C++: Types, Variables, Opérateurs   29     © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   30           © 1997-2003 Fabio HERNANDEZ
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
                                                   throw

POO en C++: Types, Variables, Opérateurs      31                 © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   32           © 1997-2003 Fabio HERNANDEZ
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                           --x

POO en C++: Types, Variables, Opérateurs         33   © 1997-2003 Fabio HERNANDEZ
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 --x

POO en C++: Types, Variables, Opérateurs           34          © 1997-2003 Fabio HERNANDEZ
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
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
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és


POO en C++: Types, Variables, Opérateurs   37               © 1997-2003 Fabio HERNANDEZ
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és




POO en C++: Types, Variables, Opérateurs   38               © 1997-2003 Fabio HERNANDEZ
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   0




POO en C++: Types, Variables, Opérateurs   39                   © 1997-2003 Fabio HERNANDEZ
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   1


POO en C++: Types, Variables, Opérateurs   40                       © 1997-2003 Fabio HERNANDEZ
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   0




POO en C++: Types, Variables, Opérateurs   41           © 1997-2003 Fabio HERNANDEZ
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)/numMonths

POO en C++: Types, Variables, Opérateurs   42       © 1997-2003 Fabio HERNANDEZ
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 gauche

POO en C++: Types, Variables, Opérateurs   43     © 1997-2003 Fabio HERNANDEZ
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 assignement




POO en C++: Types, Variables, Opérateurs          44              © 1997-2003 Fabio HERNANDEZ
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
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   46           © 1997-2003 Fabio HERNANDEZ
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
         fonction




POO en C++: Types, Variables, Opérateurs    47         © 1997-2003 Fabio HERNANDEZ
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
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
   L'expression sizeof(int*) retourne cette taille

POO en C++: Types, Variables, Opérateurs   49          © 1997-2003 Fabio HERNANDEZ
Types Dérivés : Pointeurs (suite)

   Pour affecter une valeur à un pointeur
                                                    Extraction de
           double ratio = 45.2;                  l'adresse 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
                          ratioPtr

sizeof(double*)                                 45.2       sizeof(double)




POO en C++: Types, Variables, Opérateurs   50           © 1997-2003 Fabio HERNANDEZ
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
                          ratioPtr

sizeof(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
Types Dérivés : Pointeurs (suite)
    Un pointeur peut recevoir l'adresse 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
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
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
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
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
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   57           © 1997-2003 Fabio HERNANDEZ
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 constant




POO en C++: Types, Variables, Opérateurs       58       © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   59           © 1997-2003 Fabio HERNANDEZ
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
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
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   62           © 1997-2003 Fabio HERNANDEZ
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
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
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
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
                                       3




POO en C++: Types, Variables, Opérateurs               66          © 1997-2003 Fabio HERNANDEZ
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

                                           3




POO en C++: Types, Variables, Opérateurs                67   © 1997-2003 Fabio HERNANDEZ
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
   tableaux


POO en C++: Types, Variables, Opérateurs   68                 © 1997-2003 Fabio HERNANDEZ
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
                                           // array




POO en C++: Types, Variables, Opérateurs   69            © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   70           © 1997-2003 Fabio HERNANDEZ
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
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   72           © 1997-2003 Fabio HERNANDEZ
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 6



POO en C++: Types, Variables, Opérateurs   73                © 1997-2003 Fabio HERNANDEZ
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 conversion


POO en C++: Types, Variables, Opérateurs   74               © 1997-2003 Fabio HERNANDEZ
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 conversion



POO en C++: Types, Variables, Opérateurs        75             © 1997-2003 Fabio HERNANDEZ
Contrôle d'Avancement
   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 Type


POO en C++: Types, Variables, Opérateurs   76           © 1997-2003 Fabio HERNANDEZ

Contenu connexe

Tendances

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++Fabio Hernandez
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Fabio Hernandez
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Fabio Hernandez
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Fabio Hernandez
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaAziz Darouichi
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NETAziz Darouichi
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Aurélien Regat-Barrel
 

Tendances (20)

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 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
 
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NET
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !
 

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

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++Wael Ismail
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)Wael Ismail
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfYasushiTsubakik
 
Les Structures de données
Les Structures de donnéesLes Structures de données
Les Structures de donnéesHichem Kemali
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxbetalab
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3PGambette
 
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfChapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfAdjimbawNDIAYE
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptxMED B
 

Similaire à Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++ (20)

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Ch02
Ch02Ch02
Ch02
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
Les Structures de données
Les Structures de donnéesLes Structures de données
Les Structures de données
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
Chapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et InstructionsChapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et Instructions
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
langage C++
langage C++langage C++
langage C++
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3
 
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfChapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptx
 
algorithmique
algorithmiquealgorithmique
algorithmique
 

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

  • 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. Vue d'Ensemble Notions de base Types, variables, opérateurs Contrôle d'exé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/sortie POO en C++: Types, Variables, Opérateurs 18 © 1997-2003 Fabio HERNANDEZ
  • 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 Type POO en C++: Types, Variables, Opérateurs 19 © 1997-2003 Fabio HERNANDEZ
  • 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és POO en C++: Types, Variables, Opérateurs 20 © 1997-2003 Fabio HERNANDEZ
  • 5. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 21 © 1997-2003 Fabio HERNANDEZ
  • 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. 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 flottante POO en C++: Types, Variables, Opérateurs 23 © 1997-2003 Fabio HERNANDEZ
  • 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 long POO en C++: Types, Variables, Opérateurs 24 © 1997-2003 Fabio HERNANDEZ
  • 9. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 25 © 1997-2003 Fabio HERNANDEZ
  • 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 à 256 POO en C++: Types, Variables, Opérateurs 26 © 1997-2003 Fabio HERNANDEZ
  • 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. 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; // usage POO en C++: Types, Variables, Opérateurs 28 © 1997-2003 Fabio HERNANDEZ
  • 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 utilisation POO en C++: Types, Variables, Opérateurs 29 © 1997-2003 Fabio HERNANDEZ
  • 14. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 30 © 1997-2003 Fabio HERNANDEZ
  • 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 throw POO en C++: Types, Variables, Opérateurs 31 © 1997-2003 Fabio HERNANDEZ
  • 16. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 32 © 1997-2003 Fabio HERNANDEZ
  • 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 --x POO en C++: Types, Variables, Opérateurs 33 © 1997-2003 Fabio HERNANDEZ
  • 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 --x POO en C++: Types, Variables, Opérateurs 34 © 1997-2003 Fabio HERNANDEZ
  • 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. 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. 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és POO en C++: Types, Variables, Opérateurs 37 © 1997-2003 Fabio HERNANDEZ
  • 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és POO en C++: Types, Variables, Opérateurs 38 © 1997-2003 Fabio HERNANDEZ
  • 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 0 POO en C++: Types, Variables, Opérateurs 39 © 1997-2003 Fabio HERNANDEZ
  • 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 1 POO en C++: Types, Variables, Opérateurs 40 © 1997-2003 Fabio HERNANDEZ
  • 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 0 POO en C++: Types, Variables, Opérateurs 41 © 1997-2003 Fabio HERNANDEZ
  • 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)/numMonths POO en C++: Types, Variables, Opérateurs 42 © 1997-2003 Fabio HERNANDEZ
  • 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 gauche POO en C++: Types, Variables, Opérateurs 43 © 1997-2003 Fabio HERNANDEZ
  • 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 assignement POO en C++: Types, Variables, Opérateurs 44 © 1997-2003 Fabio HERNANDEZ
  • 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. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 46 © 1997-2003 Fabio HERNANDEZ
  • 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 fonction POO en C++: Types, Variables, Opérateurs 47 © 1997-2003 Fabio HERNANDEZ
  • 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. 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 L'expression sizeof(int*) retourne cette taille POO en C++: Types, Variables, Opérateurs 49 © 1997-2003 Fabio HERNANDEZ
  • 34. Types Dérivés : Pointeurs (suite) Pour affecter une valeur à un pointeur Extraction de double ratio = 45.2; l'adresse 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 ratioPtr sizeof(double*) 45.2 sizeof(double) POO en C++: Types, Variables, Opérateurs 50 © 1997-2003 Fabio HERNANDEZ
  • 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 ratioPtr sizeof(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. Types Dérivés : Pointeurs (suite) Un pointeur peut recevoir l'adresse 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. 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. 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. 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. 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. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 57 © 1997-2003 Fabio HERNANDEZ
  • 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 constant POO en C++: Types, Variables, Opérateurs 58 © 1997-2003 Fabio HERNANDEZ
  • 43. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 59 © 1997-2003 Fabio HERNANDEZ
  • 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. 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. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 62 © 1997-2003 Fabio HERNANDEZ
  • 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. 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. 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. 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 3 POO en C++: Types, Variables, Opérateurs 66 © 1997-2003 Fabio HERNANDEZ
  • 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 3 POO en C++: Types, Variables, Opérateurs 67 © 1997-2003 Fabio HERNANDEZ
  • 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 tableaux POO en C++: Types, Variables, Opérateurs 68 © 1997-2003 Fabio HERNANDEZ
  • 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 // array POO en C++: Types, Variables, Opérateurs 69 © 1997-2003 Fabio HERNANDEZ
  • 54. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 70 © 1997-2003 Fabio HERNANDEZ
  • 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. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 72 © 1997-2003 Fabio HERNANDEZ
  • 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 6 POO en C++: Types, Variables, Opérateurs 73 © 1997-2003 Fabio HERNANDEZ
  • 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 conversion POO en C++: Types, Variables, Opérateurs 74 © 1997-2003 Fabio HERNANDEZ
  • 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 conversion POO en C++: Types, Variables, Opérateurs 75 © 1997-2003 Fabio HERNANDEZ
  • 60. Contrôle d'Avancement 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 Type POO en C++: Types, Variables, Opérateurs 76 © 1997-2003 Fabio HERNANDEZ