Héritage C ++ multiple, multiniveau et hiérarchique

Dans cet article, vous découvrirez différents modèles d'héritage en programmation C ++: héritage multiple, multi-niveaux et hiérarchique avec des exemples.

L'héritage est l'une des principales caractéristiques d'un langage de programmation orienté objet. Il permet aux développeurs de logiciels de dériver une nouvelle classe de la classe existante. La classe dérivée hérite des fonctionnalités de la classe de base (classe existante).

Il existe différents modèles d'héritage dans la programmation C ++.

Héritage à plusieurs niveaux C ++

Dans la programmation C ++, non seulement vous pouvez dériver une classe de la classe de base, mais vous pouvez également dériver une classe de la classe dérivée. Cette forme d'héritage est connue sous le nom d'héritage à plusieurs niveaux.

Classe A (… ); classe B: public A (…); classe C: public B (………);

Ici, la classe B est dérivée de la classe de base A et la classe C est dérivée de la classe dérivée B.

Exemple 1: héritage à plusieurs niveaux C ++

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Production

 Contenu de la classe de base.

Dans ce programme, la classe C est dérivée de la classe B (qui est dérivée de la classe de base A).

L'obj objet de la classe C est défini dans la main()fonction.

Lorsque la display()fonction est appelée, la display()classe A est exécutée. C'est parce qu'il n'y a pas de display()fonction dans la classe C et la classe B.

Le compilateur recherche d'abord la display()fonction dans la classe C. Puisque la fonction n'existe pas là, il recherche la fonction dans la classe B (comme C est dérivé de B).

La fonction n'existe pas non plus dans la classe B, donc le compilateur la recherche dans la classe A (car B est dérivé de A).

Si la display()fonction existe en C, le compilateur remplace la display()classe A (en raison du remplacement de la fonction membre).

Héritage multiple C ++

Dans la programmation C ++, une classe peut être dérivée de plusieurs parents. Par exemple: Une classe Bat est dérivée des classes de base Mammal et WingedAnimal. Cela a du sens parce que la chauve-souris est un mammifère aussi bien qu'un animal ailé.

Exemple 2: héritage multiple dans la programmation C ++

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Production

Les mammifères peuvent donner naissance directement. L'animal ailé peut battre.

Ambiguïté dans l'héritage multiple

Le problème le plus évident de l'héritage multiple se produit lors du remplacement de fonction.

Supposons que deux classes de base aient une même fonction qui n'est pas remplacée dans la classe dérivée.

Si vous essayez d'appeler la fonction à l'aide de l'objet de la classe dérivée, le compilateur affiche une erreur. C'est parce que le compilateur ne sait pas quelle fonction appeler. Par exemple,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Ce problème peut être résolu en utilisant la fonction de résolution de portée pour spécifier quelle fonction classer base1 ou base2

 int main () (obj.base1 :: someFunction (); // La fonction de la classe base1 est appelée obj.base2 :: someFunction (); // La fonction de la classe base2 est appelée.)

Héritage hiérarchique C ++

Si plusieurs classes sont héritées de la classe de base, on parle d'héritage hiérarchique. Dans l'héritage hiérarchique, toutes les fonctionnalités communes aux classes enfants sont incluses dans la classe de base.

Par exemple: la physique, la chimie, la biologie sont issues de la classe de sciences.

Syntaxe de l'héritage hiérarchique

 class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)

Articles intéressants...