Support de cours Mohamed EL WAFIQ Version 2017 Programmation Orientée Objet en

Support de cours Mohamed EL WAFIQ Version 2017 Programmation Orientée Objet en Langage C++ Programmation Orientée Objet en Langage C++ 2 M.E Avant-propos Ce cours a été développé et amélioré au fil des années afin de donner un support résumé et simplifié aux étudiants ayant un bon niveau en programmation structurée en langage de programmation C. Structure du cours Ce support de cours est structuré pédagogiquement selon une progression simpliste en expliquant les concepts, en donnant des exemples d’application et en proposant des exercices de renforcement dont les solutions sont présentées à titre concis. Compilation des programmes sources Tous les programmes sources de ce cours sont compilés sous Dev-C++, Version 4.9.9.2, en incluant les fichiers entête correspondants. Programmation Orientée Objet en Langage C++ 3 M.E Table des matières Chapitre 0 : Spécificités du Langage C++ ...........................................................................5 1. Commentaire en fin de ligne ........................................................................................5 2. Emplacement des déclarations .....................................................................................5 3. Notion de référence ......................................................................................................5 3.1. Transmission des arguments par valeur .................................................................5 3.2. Transmission des arguments par adresse ...............................................................6 3.3. Transmission des arguments par référence ............................................................6 4. Les arguments par défaut .............................................................................................6 5. Surdéfinition de fonction (overloading : surcharge) ......................................................8 6. Les opérateurs ‘new’ et ‘delete’ ...................................................................................9 6.1. L’opérateur ‘new’ .................................................................................................9 6.2. L’opérateur ‘delete’ ............................................................................................ 10 7. Utilisation des fonctions ‘en ligne’ (inline)................................................................. 10 Chapitre 1 : Notions de Classe et Objet ............................................................................. 11 1. Exemple du type classe .............................................................................................. 11 2. Affectation d’objets ................................................................................................... 12 3. Notion de constructeur et de destructeur ..................................................................... 12 3.1. Introduction ........................................................................................................ 12 3.2. Construction et destruction des objets ................................................................. 13 3.3. Rôle de constructeur et de destructeur ................................................................. 14 4. Membres statiques ..................................................................................................... 15 Chapitre 2 : Propriétés des fonctions membres ................................................................. 20 1. Surdéfinition des fonctions membres.......................................................................... 20 2. Arguments par défaut ................................................................................................. 21 3. Les fonctions membres en ligne ................................................................................. 21 4. Cas des objets transmis en argument d’une fonction membre ..................................... 22 5. Mode de transmission des objets, arguments d’une fonction ....................................... 22 5.1. Transmission de l’adresse d’un objet ................................................................... 22 5.2. Transmission par référence ................................................................................. 23 6. Autoréférence : le mot clé ‘this’ ................................................................................. 24 Chapitre 3 : Construction, destruction et initialisation des objets ................................... 25 1. Objets automatiques et statiques................................................................................. 25 1.1. Durée de vie d’allocation mémoire ...................................................................... 25 1.2. Appel des constructeurs et des destructeurs ......................................................... 25 2. Les objets temporaires ............................................................................................... 25 3. Les objets dynamiques ............................................................................................... 26 4. Tableaux d’objets....................................................................................................... 26 5. Objets d’objets ........................................................................................................... 27 6. Initialisation d’un objet lors de sa déclaration ............................................................. 28 6.1. Un premier exemple ............................................................................................ 28 6.2. Constructeur par recopie ..................................................................................... 29 6.3. Exemple d’utilisation du constructeur par recopie ............................................... 29 Chapitre 4 : Les fonctions amies ........................................................................................ 32 1. Exemple de fonction indépendante amie d’une classe ................................................ 32 2. Les différentes situations d’amitié .............................................................................. 33 2.1. Fonction membre d’une classe, amie d’une autre classe ...................................... 33 2.2. Fonction amie de plusieurs classes ...................................................................... 33 2.3. Toutes les fonctions d’une classe sont amies d’une autre classe ........................... 34 Programmation Orientée Objet en Langage C++ 4 M.E Chapitre 5 : Surdéfinition des opérateurs ......................................................................... 36 1. Le mécanisme de la surdéfinition des opérateurs ........................................................ 36 1.1. Surdéfinition d’opérateur avec une fonction amie................................................ 36 1.2. Surdéfinition d’opérateur avec une fonction membre .......................................... 37 2. Les possibilités et les limites de la surdéfinition des opérateurs en C++...................... 38 2.1. Il faut se limiter aux opérateurs existants ............................................................. 38 2.2. Tableau d’opérateurs surdéfinissabes, classés par priorité décroissante ............... 38 2.3. Choix entre fonction membre et fonction amie .................................................... 38 3. Exemple de surdéfinition de l’opérateur ‘[ ]’ .............................................................. 39 4. Exemple de surdéfinition de l’opérateur ‘=’ ............................................................... 40 Chapitre 6 : La technique de l'héritage ............................................................................. 43 1. Mise en œuvre de l'héritage ........................................................................................ 43 1.1. Exemple simple sans constructeur ni destructeur ................................................. 43 1.2. Commentaire ...................................................................................................... 43 2. Utilisation, dans une classe dérivée, des membres de la classe de base ....................... 44 3. Redéfinition des fonctions membres ........................................................................... 45 4. Appel des constructeurs et des destructeurs ................................................................ 46 5. Contrôle des accès ..................................................................................................... 47 5.1. L’héritage privé .................................................................................................. 47 5.2. Les membres protégés d’une classe ..................................................................... 48 6. L'héritage en général .................................................................................................. 49 7. Conversion d'un objet dérivé dans un objet d'un type de base ..................................... 49 Chapitre 7 : L’héritage multiple ........................................................................................ 50 1. Mise en œuvre de l’héritage multiple ......................................................................... 50 2. Les classes virtuelles .................................................................................................. 51 3. Appel des constructeurs et des destructeurs dans le cas des classes virtuelles ............. 52 Chapitre 8 : Le polymorphisme ......................................................................................... 57 1. Redéfinition des fonctions .......................................................................................... 57 2. Fonction virtuelle pure et classe abstraite ................................................................... 60 2.1. Fonction virtuelle pure ........................................................................................ 60 2.2. Classes abstraites ................................................................................................ 60 Chapitre 9 : Gestion des flux .............................................................................................. 62 1. Généralités sur les flux ............................................................................................... 62 2. Afficher sur l’écran avec ‘cout’ .................................................................................. 63 3. Saisir au clavier avec ‘cin’ ......................................................................................... 65 4. Redéfinir les opérateurs de flux .................................................................................. 67 5. Lire à partir d’un fichier ou écrire dans un fichier....................................................... 69 Chapitre 10 : Les templates................................................................................................ 72 1. Les fonctions templates .............................................................................................. 72 2. Les classes templates ................................................................................................. 73 Chapitre 11 : Gestion des exceptions ................................................................................. 76 1. Gestion des erreurs en utilisant les valeurs de retour des fonctions ............................. 76 2. Mise en œuvre des exceptions .................................................................................... 77 2.1. Définir une classe d’exception ............................................................................ 77 2.2. Lancer l’exception .............................................................................................. 78 2.3. Intercepter l’exception ........................................................................................ 79 3. Hiérarchie des classes d’exception ............................................................................. 84 Références bibliographiques .............................................................................................. 87 Programmation Orientée Objet en Langage C++ 5 M.E Chapitre 0 : Spécificités du Langage C++ C++ dispose d’un certain nombre de spécificités qui ne sont pas obligatoirement relatives à la programmation orientée objet. 1. Commentaire en fin de ligne Exemple //ceci est un commentaire. int a; // déclaration de a. 2. Emplacement des déclarations La déclaration des variables doit s’effectuer avant leur utilisation n’importe où dans un bloc ou dans une fonction. Exemple main() { int a=7, b; b=a; float x, y; x=2*a+y; } Exemple for(int i=0; i<7; i++) 3. Notion de référence 3.1. Transmission des arguments par valeur Exemple main() { void echange(int,int); int a=2, b=5; cout<<”Avant appel : ”<<a<<” - ”<<b<<” \n”; echange(a,b); cout<<”Après appel : ”<<a<<” - ”<<b<<” \n”; } //------------------------------------------------------- void echange(int m,int n) { int z; z=m; m=n; n=z; } Programmation Orientée Objet en Langage C++ 6 M.E Exécution 3.2. Transmission des arguments par adresse main() { void echange(int *,int *); int a=2, b=5; cout<<”Avant appel : ″<<a<<″ - ″<<b<< ” \n ”; echange(&a,&b); cout<<”Après appel : ”<<a<<” - “<<b<< ” \n ”; } //-------------------------------------------------------- void echange(int *x,int *y) { int z; z=*x; *x=*y; *y=z; } Exécution 3.3. Transmission des arguments par référence En C++, la transmission par référence est une forme simplifiée de la transmission par adresse. main() { void echange(int &,int &); int a=2, b=5; cout<<″Avant appel : ″<<a<<″ - ″<<b<<″\n ″; echange(a,b); cout<<″Apres appel : ″<<a<<″ - ″<<b<<″\n ″; } //---------------------------------------------------------- void echange (int & x,int & y) { int z; z=x; x=y; y=z; } 4. Les arguments par défaut En C, il est indispensable que le nombre d’arguments passés correspond au nombre d’arguments déclarés. C++ peut ne pas respecter cette règle. Programmation Orientée Objet en Langage C++ 7 M.E Exemple 1 main() { int m=1, n=5; void f(int,int=7); f(3,5); f(4); } //----------------------------------------------- void f(int a,int b) { cout<<″Valeur 1 : ″<<a<<″ - Valeur 2 : ″<<b<<″\n″; } Exécution NB : - La fonction f est déclarée avec un deuxième argument initialisé par défaut par la valeur 7. - Pendant l’appel de la fonction f, si le deuxième argument n’est pas précisé, il est alors égal à la valeur 7. - Un appel du genre f() sera rejeté par le compilateur. Exemple2 main() { void f(int=33,int=77); f(99,55); f(44); f(); } //----------------------------------- void f(int a,int b) { cout<<″Valeur 1 : ″<<a<<″ - Valeur 2 : ″<<a<<″\n″; } Exécution Remarque Lorsqu’une déclaration prévoit des valeurs par défaut, les arguments concernés doivent obligatoirement être les derniers de la liste. Programmation Orientée Objet en Langage C++ 8 M.E Exemple La déclaration : int f (int=2, int, int=7) ; est interdite, car un appel du genre f(3, 4); peut être interprété comme : f(2, 3, 4); ou f(3, 4, 7); 5. Surdéfinition de fonction (overloading : surcharge) On parle de surdéfinition ou de surcharge lorsqu’un même symbole possède plusieurs significations différentes, le choix de l’une des significations se faisant en fonction du contexte. Pour pouvoir employer plusieurs fonctions du même nom, il faut un critère permettant de choisir la bonne fonction. En C++, ce choix est basé sur le type des arguments. Exemple void f(int x) { cout<<″fonction numéro 1 : ″<<x<<″\n″; } void f(double x) { cout<<″fonction numéro 2 : ″<<x<<″\n″; } main() { int a=2; double b=5.7; f(a); f(b); f(‘A’); } Exécution La valeur 65 représente le code ASCII de la lettre A. Remarque Le C++ a choisi donc la bonne fonction en fonction de ses arguments. Cas 1 void f(int); //f1 void f(double); //f2 char c; float b; - f(c); appellera la fonction f1 après conversion de la valeur de c en int. - f(b); appellera la fonction f2 après conversion de b en uploads/Philosophie/ support-de-cours-de-poo-en-c-m-elwafiq-version-2017.pdf

  • 52
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager