C ++ Multipler Vererbung

C ++ Multipler Vererbung
Erbschaft ist der Prozess der Verbesserung und Erweiterung der vorhandenen Klassen, ohne sich in ihnen zu ändern. Dies führt zu einer hierarchischen Beziehung zwischen den Klassen. Die Vererbung in der C ++ - Programmiersprache wird in 5 Haupttypen abgeleitet. Welche sind:
  • Einzelvererbung
  • Multiple Vererbung
  • Hierarchische Erbe
  • Mehrebenenvererbung
  • Hybriderbschaft

Hier ist unser Diskussionsthema mehrere Erbschaften.

Mehrere Erbschaften

Multiple Vererbung tritt auf, wenn mehr als eine Klasse als übergeordnete Klasse arbeitet. In der C ++ - Programmiersprache können wir eine Klasse aus der Basisklasse abgeben, aber wir können auch eine Klasse aus den Klassen ableiten, die auch von einer anderen Basisklasse abgeleitet sind. Wir nennen diese Art von Vererbung mehrere Erbschaften. Während dieses Prozesses treten auch einige Probleme auf; Diese werden später im Leitfaden erklärt.

Vererbungszweck

Vererbung ist einer der nützlichen und wichtigen Ansätze von OOP (objektorientierte Programmierung). Der Hauptzweck der Verwendung der Vererbung in OOP oder C ++ besteht darin, den Benutzer zu ermöglichen, den Quellcode wiederzuverwenden. Anstatt denselben Code mehrmals zu schreiben, können wir einfach die Vererbung verwenden, um die Eigenschaften einer Basisklasse an die Kinderklasse zu erben. Dies reduziert auch die Komplexität des Quellcode.

Die Syntax für mehrere Erbschaften lautet:

Klasse 1
;
Klasse 2: public 1
;
Klasse 3: public 2
;

Um eine Klasse zu erben, ist der Name der untergeordneten Klasse auf der linken Seite geschrieben, während die übergeordnete Klasse auf der rechten Seite geschrieben ist und dies durch einen Dickdarm getrennt ist. In der obigen Syntax wird die Klasse 2 aus der Klasse 1 abgeleitet und Klasse 3 aus der Klasse 2 abgeleitet.

Implementierung von multipler Vererbung

Beispiel 1

Dieses Beispiel ist eine Stichprobe -Verwendung von Vererbung, da mehrere Erbschaften ein Kind mit zwei Eltern enthalten. Hier ist Klasse C eine Kinderklasse, während Klasse A und Klasse B über Elternklassen sind. Jede Klasse enthält einen Konstruktor, der eine Nachricht anzeigt, wenn das Klassenobjekt erstellt wird. Die Verwendung des Bibliotheks -iOstream hilft bei der Deklaration von CIN, Cout -Funktionen. Beide übergeordneten Klassen werden in irgendeiner Weise deklariert, aber während er die Kinderklasse erklärt, müssen wir beide Elternklassen erwähnen, die von der Kinderklasse geerbt wurden. Hier muss die Reihenfolge beider Klassen im Auge behalten werden. Die Klasse, die zuerst deklariert wird, muss zuletzt erwähnt werden.

Zum Beispiel wird im angegebenen Beispiel die Klasse A zuerst im nach b zu erwähnten Quellcode erstellt, und Klasse B wird zuerst erwähnt.

Klasse C: öffentlich B, öffentlich A

Wir erstellen nur ein Objekt für die untergeordnete Klasse im Hauptprogramm, wie im Erbschaftsprozess, das Objekt unter Kinderklassen automatisch auf die übergeordnete Klasse zugreift. Speichern Sie nun die Datei mit der '.C 'Erweiterung, den Code über einen G ++ - Compiler kompilieren. '-O' wird verwendet, um die Ausgabe der Datei zu speichern.

$ g ++ -o multi -multi.C
$ ./multi

Bei einer erfolgreichen Ausführung wird die Antwort angezeigt. Sie sehen.

Beispiel 2

Hier ist ein Beispiel für mehrere Erbschaften, bei denen eine Kinderklasse 'Puppe' zwei Eltern, ein Spielzeug und ein Pluspusy enthält. Diese Klassen werden genauso deklariert wie im letzten Beispiel. Jeder Konstruktor wird für beide übergeordneten Klassen erstellt. Die dritte Klasse, die Kinderklasse, wird nur deklariert, aber ihr Konstruktor wird nicht erstellt. Es gibt nur eine Erklärung. Hier wird die Anordnung für die Erklärung der Elternklasse geändert, da das Klassenspielzeug zuerst erklärt wird, später erwähnt werden muss, aber zum Zeitpunkt der Erklärung der Kinderklasse wird es zuerst erwähnt. In ähnlicher Weise wird die Klassenplushtoy später auch nach dem Klassenspielzeug erklärt.

Während des Erstellens des Objekts werden die Konstruktoren der Elternklassen abhängig von der genannten Reihenfolge ausgeführt, während die Kinderklasse deklariert wird.

Führen Sie nun den Code aus; Sie werden sehen, dass der Konstruktor des übergeordneten Spielzeugs zuerst ausgeführt wird, und dann der Konstruktor der Klasse „Plushtoy“ ausgeführt wird.

Beispiel 3

In der Situation tritt ein Diamantproblem auf, wenn zwei Eltern (Superklasse) eine gemeinsame Basisklasse haben. Zum Beispiel hat Child C zwei Eltern, A und B, und beide gehören zu einer einzigen Basisklasse D. Die Kinderklasse C enthält also indirekt zwei Kopien der Klasse D, was zu Unklarheiten führt. Dieses Problem wird über C ++ - Quellcode erklärt.

Eine Klassenperson wird als Basisklasse erstellt und verfügt über einen Konstruktor, der eine Nachricht anzeigt. Eine andere Klasse wird erstellt, die ein Kind der Basisklasse 'Person' ist und einen Konstruktor im öffentlichen Teil der Klasse hat. Wie die Fakultät wird auch ein Klassenstudent erstellt, der von der Person der Eltern der Elternbasis erbt.

Fakultät und Schüler werden in beiden Klassen zu Superklasseneltern, wenn eine Klasse TA von ihnen abgeleitet ist. Diese untergeordnete Klasse TA wird durch die Namen beider Elternklassen deklariert.

Klasse TA: Öffentliche Fakultät: öffentlicher Student

Dies bildet einen Diamanten; Zwei Klassen erben eine einzelne Klasse, während eine einzige Klasse von diesen beiden Klassen geerbt wird. Indirekt enthält die Kinderklasse Daten aus der Basisklasse ihrer Eltern.

Die Objekterstellung initiiert alle Konstruktoren der oben beschriebenen Klassen.

Wenn das Programm ausgeführt wird, werden Sie feststellen, dass der Konstruktor der Fakultätsklasse zuerst ausgeführt wird. Die Fakultätsklasse zeigt also zunächst die Meldung der Personenklasse und dann ihre Nachricht an. In ähnlicher Weise wird die Schülerklasse zuerst die Personklasse und dann die Nachricht drucken. Und am Ende wird die Unterrichtsnachricht angezeigt.

Wenn in der Basisklasse ein Verfahren oder Betrieb deklariert wird, wird er zweimal kopiert. Dies führt zu Unklarheiten.

Um dieses Problem zu entfernen, gibt es eine Lösung. Das Schlüsselwort "Virtual" wird in diesem Aspekt verwendet. Verwenden des virtuellen Schlüsselworts mit der übergeordneten Klasse, der Fakultät und des Schülers vermeiden die Erstellung von zwei Kopien einer Basisklasse. Dies wird auf ein unten angezeigter Beispiel angewendet.

Der verbleibende Code ist der gleiche. Dies funktioniert so, dass der Basisklassenkonstruktor (Person) standardmäßig aufgerufen wird, wenn das Objekt erstellt wird. Dadurch wird die Duplikation derselben Nachricht oder einer Operation beseitigt.

Jetzt werden wir den Code ausführen, um die Ergebnisse zu sehen. Der Basisklassenkonstruktor wird nur ein einziges Mal ausgeführt.

Abschluss

'Multiple Vererbung C ++' enthält die grundlegende Erklärung der Vererbung und enthält sie in den Code. Einige elementare Beispiele werden in C ++ implementiert, um die Arbeit mehrerer Erbschaften zu erklären. Dieser Leitfaden bietet einige wichtige Erbschaftsprobleme wie das Diamond -Problem. Es wird ausführlich ausgearbeitet, und auch die Lösung dafür wird hervorgehoben. Hoffentlich wird diese Bemühungen eine Quelle des vollständigen Wissens für die neuen Benutzer sein.