Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Vererbungsmodelle: Mehrfach, Mehrstufig, Hierarchisch

C++ Vererbungsmodelle: Mehrfach, Mehrstufig, Hierarchisch

In diesem Tutorial untersuchen wir C++ Vererbungsmuster – mehrfache, mehrstufige und hierarchische Vererbung – mit praktischen Code-Beispielen.

Vererbung ist ein grundlegendes Merkmal der objektorientierten Programmierung. Sie ermöglicht Entwicklern, neue Klassen zu erstellen, die Eigenschaften und Verhalten von bestehenden übernehmen.

Im Folgenden betrachten wir drei wichtige in C++ verfügbare Vererbungsmodelle.


C++ Mehrstufige Vererbung

In einer mehrstufigen Hierarchie leitet sich eine Klasse von einer anderen abgeleiteten Klasse ab. Die Kette geht weiter, bis eine Basisklasse erreicht wird.

 class A { // Basisklassen-Implementierung }; class B : public A { // B erbt von A }; class C : public B { // C erbt von B }; 

Hier erbt B von A, und C erbt von B, was eine vertikale Vererbungskette bildet.

Beispiel 1: Mehrstufige Vererbung in C++

 #include <iostream> using namespace std; class A { public: void display() { cout << "Basisklasseninhalt." << endl; } }; class B : public A {}; class C : public B {}; int main() { C obj; obj.display(); return 0; }  

Ausgabe

Basisklasseninhalt.

Dieses Programm demonstriert, dass ein Objekt von C display() aufrufen kann, das in der ultimativen Basisklasse A definiert ist, da keine überschreibende Implementierung in B oder C existiert. Der Compiler löst den Aufruf auf, indem er die Vererbungskette von der am stärksten abgeleiteten Klasse nach oben durchsucht.


C++ Mehrfachvererbung

C++ erlaubt es einer Klasse, von mehr als einer Basisklasse zu erben. Zum Beispiel kann eine Bat (Fledermaus) sowohl von Mammal (Säugetier) als auch von WingedAnimal (Flügeltier) abgeleitet werden, da eine Fledermaus gleichzeitig ein Säugetier und ein Flügeltier ist.

C++ Vererbungsmodelle: Mehrfach, Mehrstufig, Hierarchisch

Beispiel 2: Mehrfachvererbung in C++

 #include <iostream> using namespace std; class Mammal { public: Mammal() { cout << "Säugetiere können lebend gebären." << endl; } }; class WingedAnimal { public: WingedAnimal() { cout << "Flügeltiere können flattern." << endl; } }; class Bat : public Mammal, public WingedAnimal {}; int main() { Bat b1; return 0; }  

Ausgabe

Säugetiere können lebend gebären. Flügeltiere können flattern.

Ambiguität in Mehrfachvererbung auflösen

Wenn zwei Basisklassen eine Funktion mit demselben Namen bereitstellen, kann der Compiler nicht entscheiden, welche aufgerufen werden soll, was zu einem Ambiguitätsfehler führt.

 class Base1 { public: void someFunction() { /* ... */ } }; class Base2 { public: void someFunction() { /* ... */ } }; class Derived : public Base1, public Base2 {}; int main() { Derived obj; // obj.someFunction(); // Fehler: mehrdeutig }  

Verwenden Sie den Gültigkeitsbereichsoperator, um die gewünschte Basisklassen-Funktion anzugeben:

 int main() { Derived obj; obj.Base1::someFunction(); // Ruft Base1's Implementierung auf obj.Base2::someFunction(); // Ruft Base2's Implementierung auf } 

C++ Hierarchische Vererbung

Bei hierarchischer Vererbung erben mehrere abgeleitete Klassen von einer einzelnen Basisklasse. Alle gemeinsamen Attribute und Verhaltensweisen werden in der Basisklasse gekapselt, während jede abgeleitete Klasse ihre eigene Spezialisierung hinzufügen kann.

Beispiele sind Physics, Chemistry und Biology, die von Science ableiten; und Dog, Cat, Horse, die von Animal ableiten.

Syntax der hierarchischen Vererbung

 class BaseClass { // Basisklasseninhalt }; class DerivedOne : public BaseClass { // Zusätzliche Mitglieder }; class DerivedTwo : public BaseClass { // Zusätzliche Mitglieder }; class DerivedThree : public BaseClass { // Zusätzliche Mitglieder }; 

Beispiel 3: Hierarchische Vererbung in C++

 // C++ Programm zur Demonstration hierarchischer Vererbung #include <iostream> using namespace std; // Basisklasse class Animal { public: void info() { cout << "Ich bin ein Tier." << endl; } }; // Abgeleitete Klasse 1 class Dog : public Animal { public: void bark() { cout << "Ich bin ein Hund. Wuff wuff." << endl; } }; // Abgeleitete Klasse 2 class Cat : public Animal { public: void meow() { cout << "Ich bin eine Katze. Miau." << endl; } }; int main() { // Hund-Instanz Dog dog1; cout << "Hund-Klasse:" << endl; dog1.info(); dog1.bark(); // Katzen-Instanz Cat cat1; cout << "\nKatzen-Klasse:" << endl; cat1.info(); cat1.meow(); return 0; }  

Ausgabe

Hund-Klasse: Ich bin ein Tier. Ich bin ein Hund. Wuff wuff. Katzen-Klasse: Ich bin ein Tier. Ich bin eine Katze. Miau.

Sowohl Dog als auch Cat erben die info() Methode von Animal, während jede Klasse ihr eigenes spezialisiertes Verhalten einführt.


C Sprache

  1. C# Klassen & Objekte: Fundamente für robustes OOP
  2. C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
  3. C# Partielle Klassen und Methoden verstehen
  4. Versiegelte Klassen und Methoden in C# meistern
  5. C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
  6. C++ Vererbung: Public, Protected & Private erklärt
  7. C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
  8. C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle
  9. C++ Speicherklassen: Scope, Lifetime & Verwendung
  10. C++ Datum & Zeit: Umfassender Leitfaden