Programmation Orientée objet en C++
Chapitre 1. 1 Vocabulaire
Chapitre 2. 2 Principes de la programmation objet
Chapitre 3. 3 Du C au C++
Chapitre 4. 4 Les classes
4.1. Entête dans le .hpp
4.2. Définition dans le .cpp
4.3. Instanciation et Utilisation
4.4. Utilisation avec des pointeurs
4.5. Fonctions
4.6. Constructeurs/Destructeurs
4.7. Objets utilisés en paramètres, en retour
4.8. Adresse d'un objet : this
4.9. Constructeur par recopie
4.10. Objets contenant d'autres objets
4.11. Surcharge/Surdéfinition d'opérateurs
4.12. Héritage
Home pageContentsHigher levelPrevious page Bottom of page

Classes virtuelles

Imaginons l’héritage multiple qui suit :

Dans l’exemple ci-dessus, la classe maClasse4 va hériter deux fois du membre a de maClasse1. Une fois par maClasse2 et une fois par maClasse3. Nous aurons donc deux fois le membre a ce qui va provoquer une ambiguïté.

Ce problème se résout en utilisant l’opérateur de résolution de portée ( : : ) :

Exemple :

void main() {
maClasse4 c4;
c4.a = 0; // ERREUR, ambiguïté
c4.maClasse2 :: a = 1; // OK
c4.maClasse3 :: a = 2; // OK
}

Néanmoins, cette solution n’est pas satisfaisante puisque nous nous retrouvons avec deux instances du membre a. La solution pour n’en n’avoir qu’une est d’utiliser l’héritage virtuel.

Si l’on veut que maClasse2 et maClasse3 n’héritent qu’une seule fois de maClasse1, il faut qu’elles héritent virtuellement de cette dernière.

Il ne faut pas confondre l’héritage virtuel avec les membres de classes virtuels. Ici, le mot clé virtual ne sert qu’à indiquer au compilateur les classes à ne pas dupliquer.

 

Home pageContentsHigher levelPrevious pageTop of pageFollowing page