C ++ Multiple, Multilevel und Hierarchical Inheritance

In diesem Artikel lernen Sie verschiedene Vererbungsmodelle in der C ++ - Programmierung kennen: Mehrfache, mehrstufige und hierarchische Vererbung mit Beispielen.

Vererbung ist eines der Hauptmerkmale einer objektorientierten Programmiersprache. Es ermöglicht Softwareentwicklern, eine neue Klasse aus der vorhandenen Klasse abzuleiten. Die abgeleitete Klasse erbt die Merkmale der Basisklasse (vorhandene Klasse).

In der C ++ - Programmierung gibt es verschiedene Vererbungsmodelle.

C ++ Multilevel-Vererbung

In der C ++ - Programmierung können Sie nicht nur eine Klasse aus der Basisklasse ableiten, sondern auch eine Klasse aus der abgeleiteten Klasse. Diese Form der Vererbung wird als mehrstufige Vererbung bezeichnet.

Klasse a (… ); Klasse B: öffentlich A (…); Klasse C: öffentlich B (………);

Hier wird die Klasse B von der Basisklasse A und die Klasse C von der abgeleiteten Klasse B abgeleitet.

Beispiel 1: C ++ Multilevel-Vererbung

 #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; )

Ausgabe

 Basisklasseninhalt.

In diesem Programm wird die Klasse C von der Klasse B abgeleitet (die von der Basisklasse A abgeleitet ist).

Das obj-Objekt der Klasse C wird in der main()Funktion definiert .

Beim display()Aufruf der Funktion wird display()in Klasse A ausgeführt. Das liegt daran, dass es display()in Klasse C und Klasse B keine Funktion gibt .

Der Compiler sucht zuerst nach der display()Funktion in Klasse C. Da die Funktion dort nicht vorhanden ist, sucht er nach der Funktion in Klasse B (da C von B abgeleitet ist).

Die Funktion existiert auch nicht in Klasse B, daher sucht der Compiler in Klasse A danach (da B von A abgeleitet ist).

Wenn display()in C eine Funktion vorhanden ist, überschreibt der Compiler die display()Klasse A (aufgrund der Überschreibung der Elementfunktion).

C ++ Mehrfachvererbung

In der C ++ - Programmierung kann eine Klasse von mehr als einem Elternteil abgeleitet werden. Zum Beispiel: Eine Klasse Bat wird von den Basisklassen Mammal und WingedAnimal abgeleitet. Es ist sinnvoll, weil Fledermaus sowohl ein Säugetier als auch ein geflügeltes Tier ist.

Beispiel 2: Mehrfachvererbung in der C ++ - Programmierung

 #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; ) 

Ausgabe

Säugetiere können direkt gebären. Geflügeltes Tier kann flattern.

Mehrdeutigkeit bei Mehrfachvererbung

Das offensichtlichste Problem bei der Mehrfachvererbung tritt beim Überschreiben von Funktionen auf.

Angenommen, zwei Basisklassen haben dieselbe Funktion, die in abgeleiteten Klassen nicht überschrieben wird.

Wenn Sie versuchen, die Funktion mit dem Objekt der abgeleiteten Klasse aufzurufen, zeigt der Compiler einen Fehler an. Dies liegt daran, dass der Compiler nicht weiß, welche Funktion aufgerufen werden soll. Beispielsweise,

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

Dieses Problem kann mithilfe der Bereichsauflösungsfunktion gelöst werden, um anzugeben, welche Funktion entweder base1 oder base2 klassifizieren soll

 int main () (obj.base1 :: someFunction (); // Die Funktion der base1-Klasse heißt obj.base2 :: someFunction (); // Die Funktion der base2-Klasse heißt.)

C ++ Hierarchische Vererbung

Wenn mehr als eine Klasse von der Basisklasse geerbt wird, spricht man von hierarchischer Vererbung. Bei der hierarchischen Vererbung sind alle Funktionen, die in untergeordneten Klassen gemeinsam sind, in der Basisklasse enthalten.

Zum Beispiel: Physik, Chemie, Biologie werden aus dem naturwissenschaftlichen Unterricht abgeleitet.

Syntax der hierarchischen Vererbung

 Klasse base_class (…) Klasse first_derived_class: public base_class (…) Klasse second_derived_class: public base_class (…) Klasse Third_derived_class: public base_class (…)

Interessante Beiträge...