La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.

Présentations similaires


Présentation au sujet: "Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes."— Transcription de la présentation:

1 Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes de base. Bien entendu, pour chaque classe de base, comme lorsqu’on utilise l’héritage simple, on peut définir le mode d’héritage.

2 Héritage multiple Exemple // exemple héritage multiple #include using namespace std; class V { public: int i=55;/*... */ }; class A : public V { /*... */ }; class B : public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { C obj; obj.fonc(); system("pause"); }

3 // exemple héritage virtuel #include using namespace std; class V { public: int i=55;/*... */ }; class A : public V { /*... */ }; class B : public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { C obj; obj.fonc(); system("pause"); } La classe A contient une variable membre i. Il en va de même pour la classe B. En ce qui concerne la classe C, elle possède deux variables membres i, l'une par l'héritage par A, l'autre selon l'héritage de B, c'est ce qui provoque une erreur si on tente d'accéder à i dans C, le compilateur ne sait pas s'il doit regarder A::i ou B::i Observez ce qui se passe à l’exécution sur l’acétate suivante

4

5 La solution que propose le C++ est alors l'héritage virtuel. A hérite virtuellement de V et pour B il en va de même. Exemple // exemple héritage virtuel version 2 #include using namespace std; class V { public: int i = 55;/*... */ }; class A : virtual public V { /*... */ }; class B : virtual public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { /*... */ C obj; obj.fonc(); system("pause"); }

6 Vous constatez dans le code C++ ci-dessus que la ligne « cout » affiche deux fois la même chose et il n'y a plus d'ambiguïté sur i. On parle d' héritage en losange ou en diamant.

7 Classe abstraite En programmation orientée objet, une fonction virtuelle est une fonction définie dans une classe (méthode) qui est destinée à être redéfinie dans les classes qui en héritent. Exemple: // Classe Forme. //--------------------------------------------------------------------------- class Forme { public: // Méthode virtuelle pure. virtual void aire() = 0; }; // Classe Triangle dérivée de Forme. class Triangle : public Forme { public: virtual void aire(); }; // Classe Cercle dérivée de Forme. class Cercle : public Forme { public: virtual void aire(); };

8 // Classe Forme. //-------------------------------------------------- class Forme { public: // Méthode virtuelle pure. virtual void aire() = 0; }; // Classe Triangle dérivée de Forme. class Triangle : public Forme { public: virtual void aire(); }; // Classe Cercle dérivée de Forme. class Cercle : public Forme { public: virtual void aire(); }; La méthode aire() est redéfinie par chaque classe dérivée. En effet, la manière de calculer l'aire d'une forme dépend du type de celle-ci. Il suffit qu'une classe possède une méthode virtuelle pure pour qu'elle soit dite abstraite. On ne peut pas instancier une classe abstraite car cela n'aurait aucun sens. Par exemple : on peut instancier un objet « triangle » qui hérite de la classe de base abstraite « forme » mais on ne peut pas créer un objet « forme».

9 Par ailleurs, une tentative d’instanciation d’une classe abstraite affiche un message comme ci-dessous:


Télécharger ppt "Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes."

Présentations similaires


Annonces Google