types inheritance c
Entdecken Sie anhand von Beispielen alle Arten der Vererbung in C ++.
In unserem vorherigen Tutorial haben wir etwas über die Vererbung in C ++ gelernt. Abhängig von der Art und Weise, wie die Klasse abgeleitet wird oder wie viele Basisklassen eine Klasse erbt, gibt es folgende Vererbungstypen:
- Einzelvererbung
- Mehrfachvererbung
- Mehrstufige Vererbung
- Hierarchische Vererbung
- Hybride Vererbung
=> Hier finden Sie Informationen zur vollständigen Liste der C ++ - Tutorials.
Was du lernen wirst:
Arten der Vererbung
Im Folgenden finden Sie eine bildliche Darstellung der verschiedenen Arten der Vererbung.
Wir werden jede Art der Vererbung anhand von Beispielen in den folgenden Abschnitten sehen.
# 1) Einzelvererbung
Bei der Einzelvererbung leitet sich eine Klasse nur von einer Basisklasse ab. Dies bedeutet, dass es nur eine Unterklasse gibt, die von einer Oberklasse abgeleitet ist.
Einzelvererbung wird normalerweise wie folgt deklariert:
class subclassname : accessspecifier superclassname { //class specific code; };
Im Folgenden finden Sie ein vollständiges Beispiel für die Einzelvererbung.
#include #include using namespace std; class Animal { string name=''; public: int tail=1; int legs=4; }; class Dog : public Animal { public: void voiceAction() { cout<<'Barks!!!'; } }; int main() { Dog dog; cout<<'Dog has '< Ausgabe:
Hund hat 4 Beine
Hund hat 1 Schwanz
Hund bellt!!!
Wir haben eine Klasse Tier als Basisklasse, aus der wir einen Hund der Unterklasse abgeleitet haben. Der Klassenhund erbt alle Mitglieder der Tierklasse und kann erweitert werden, um seine eigenen Eigenschaften einzuschließen, wie aus der Ausgabe hervorgeht.
Einzelvererbung ist die einfachste Form der Vererbung.
# 2) Mehrfachvererbung
Die Mehrfachvererbung ist unten bildlich dargestellt.
Mehrfachvererbung ist eine Art von Vererbung, bei der eine Klasse von mehr als einer Klasse abgeleitet ist. Wie im obigen Diagramm gezeigt, ist Klasse C eine Unterklasse, deren übergeordnetes Element Klasse A und Klasse B sind.
In einem realen Szenario erbt ein Kind von seinem Vater und seiner Mutter. Dies kann als Beispiel für eine Mehrfachvererbung angesehen werden.
Wir präsentieren das folgende Programm, um die Mehrfachvererbung zu demonstrieren.
#include using namespace std; //multiple inheritance example class student_marks { protected: int rollNo, marks1, marks2; public: void get() { cout <> rollNo; cout <> marks1 >> marks2; } }; class cocurricular_marks { protected: int comarks; public: void getsm() { cout <> comarks; } }; //Result is a combination of subject_marks and cocurricular activities marks class Result : public student_marks, public cocurricular_marks { int total_marks, avg_marks; public: void display() { total_marks = (marks1 + marks2 + comarks); avg_marks = total_marks / 3; cout << '
Roll No: ' << rollNo << '
Total marks: ' << total_marks; cout << '
Average marks: ' << avg_marks; } }; int main() { Result res; res.get(); //read subject marks res.getsm(); //read cocurricular activities marks res.display(); //display the total marks and average marks }
Ausgabe:
Geben Sie die Rollennummer ein: 25
Geben Sie die beiden höchsten Punkte ein: 40 50
Geben Sie die Markierung für CoCurricular-Aktivitäten ein: 30
Rollennummer: 25
Gesamtpunktzahl: 120
Durchschnittsnote: 40
Im obigen Beispiel haben wir drei Klassen, d. H. Student_marks, cocurricular_marks und Result. Die Klasse student_marks liest die Betreffmarke für den Schüler. Die Klasse cocurricular_marks liest die Noten des Schülers in Aktivitäten im Rahmen des Lehrplans.
Die Ergebnisklasse berechnet die Gesamtpunktzahl für den Schüler zusammen mit den Durchschnittsnoten.
In diesem Modell wird die Ergebnisklasse aus student_marks und cocurricular_marks abgeleitet, wenn wir das Ergebnis aus dem Fach sowie aus den Markierungen für Aktivitäten im Rahmen des Lehrplans berechnen.
Dies weist mehrere Vererbungen auf.
Diamantproblem
Das Diamantproblem ist unten bildlich dargestellt:
Welche Ebene des Osi-Modells funktioniert mit Frames?
Hier haben wir eine Kinderklasse, die zwei Klassen erbt: Vater und Mutter. Diese beiden Klassen erben wiederum die Klasse Person.
Wie in der Figur gezeigt, erbt die Klasse Kind die Merkmale der Klasse Person zweimal, d. H. Einmal vom Vater und das zweite Mal von der Mutter. Dies führt zu Unklarheiten, da der Compiler nicht versteht, welchen Weg er gehen soll.
Da dieses Szenario auftritt, wenn wir eine rautenförmige Vererbung haben, wird dieses Problem bekanntlich als „ Das Diamantproblem ”.
Das in C ++ implementierte Diamond-Problem führt zu einem Mehrdeutigkeitsfehler bei der Kompilierung. Wir können dieses Problem beheben, indem wir die Stammbasisklasse als virtuell festlegen. In unserem nächsten Tutorial zum Thema Polymorphismus erfahren Sie mehr über das Schlüsselwort „virtuell“.
# 3) Mehrstufige Vererbung
Die mehrstufige Vererbung ist unten dargestellt.
Bei der mehrstufigen Vererbung wird eine Klasse von einer anderen abgeleiteten Klasse abgeleitet. Diese Vererbung kann so viele Ebenen haben, solange unsere Implementierung nicht fehlerhaft verläuft. In dem obigen Diagramm wird Klasse C von Klasse B abgeleitet. Klasse B wird wiederum von Klasse A abgeleitet.
Sehen wir uns ein Beispiel für die mehrstufige Vererbung an.
#include #include using namespace std; class Animal { string name=''; public: int tail=1; int legs=4; }; class Dog : public Animal { public: void voiceAction() { cout<<'Barks!!!'; } }; class Puppy:public Dog{ public: void weeping() { cout<<'Weeps!!'; } }; int main() { Puppy puppy; cout<<'Puppy has '< Ausgabe:
Welpe hat 4 Beine
Welpe hat 1 Schwanz
Welpenrinden !!! Welpe weint !!
Hier haben wir das Beispiel für die Einzelvererbung so geändert, dass es eine neue Klasse Welpe gibt, die von der Klasse Hund erbt, die wiederum von der Klasse Tier erbt. Wir sehen, dass die Klasse Puppy die Eigenschaften und Methoden beider Klassen darüber erwirbt und verwendet.
# 4) Hybride Vererbung
Die hybride Vererbung ist unten dargestellt.
Die hybride Vererbung ist normalerweise eine Kombination aus mehr als einer Vererbungsart. In der obigen Darstellung haben wir eine Mehrfachvererbung (B, C und D) und eine Mehrstufenvererbung (A, B und D), um eine Hybridvererbung zu erhalten.
Sehen wir uns ein Beispiel für die hybride Vererbung an.
#include #include using namespace std; //Hybrid inheritance = multilevel + multilpe class student{ //First base Class int id; string name; public: void getstudent(){ cout <> id >> name; } }; class marks: public student{ //derived from student protected: int marks_math,marks_phy,marks_chem; public: void getmarks(){ cout <>marks_math>>marks_phy>>marks_chem; } }; class sports{ protected: int spmarks; public: void getsports(){ cout <> spmarks; } }; class result : public marks, public sports{//Derived class by multiple inheritance// int total_marks; float avg_marks; public : void display(){ total_marks=marks_math+marks_phy+marks_chem; avg_marks=total_marks/3.0; cout << 'Total marks =' << total_marks << endl; cout << 'Average marks =' << avg_marks << endl; cout << 'Average + Sports marks =' << avg_marks+spmarks; } }; int main(){ result res;//object// res.getstudent(); res.getmarks(); res.getsports(); res.display(); return 0; }
Ausgabe:
Geben Sie die Studenten-ID und den Studentennamen 25 Ved ein
Geben Sie 3 Betreffzeichen ein: 89 88 87
Sportmarken eingeben: 40
Gesamtpunktzahl = 264
Durchschnittsnote = 88
Durchschnitt + Sportnoten = 128
Hier haben wir vier Klassen, d. H. Schüler, Noten, Sport und Ergebnis. Die Noten stammen aus der Schülerklasse. Das Klassenergebnis leitet sich von Noten und Sport ab, da wir das Ergebnis sowohl aus den Fachnoten als auch aus den Sportnoten berechnen.
Die Ausgabe wird generiert, indem ein Objekt der Klasse Result erstellt wird, das die Eigenschaften aller drei Klassen erhalten hat.
Beachten Sie, dass die Implementierung auch bei der Hybridvererbung zu einem „Diamantproblem“ führen kann, das mit dem zuvor erwähnten Schlüsselwort „virtuell“ gelöst werden kann.
# 5) Hierarchische Vererbung
Bei der hierarchischen Vererbung erbt mehr als eine Klasse von einer einzelnen Basisklasse, wie in der obigen Darstellung gezeigt. Dies gibt ihm eine Struktur einer Hierarchie.
Im Folgenden wird das Beispiel für die hierarchische Vererbung angegeben.
#include using namespace std; //hierarchical inheritance example class Shape // shape class -> base class { public: int x,y; void get_data(int n,int m) { x= n; y = m; } }; class Rectangle : public Shape // inherit Shape class { public: int area_rect() { int area = x*y; return area; } }; class Triangle : public Shape // inherit Shape class { public: int triangle_area() { float area = 0.5*x*y; return area; } }; class Square : public Shape // inherit Shape class { public: int square_area() { float area = 4*x; return area; } }; int main() { Rectangle r; Triangle t; Square s; int length,breadth,base,height,side; //area of a Rectangle std::cout <>length>>breadth; r.get_data(length,breadth); int rect_area = r.area_rect(); std::cout << 'Area of the rectangle = ' <base>>height; t.get_data(base,height); float tri_area = t.triangle_area(); std::cout <<'Area of the triangle = ' << tri_area<side; s.get_data(side,side); int sq_area = s.square_area(); std::cout <<'Area of the square = ' << sq_area< Ausgabe:
Geben Sie die Länge und Breite eines Rechtecks ein: 10 5
Fläche des Rechtecks = 50
Geben Sie die Basis und Höhe des Dreiecks ein: 4 8
Fläche des Dreiecks = 16
Geben Sie die Länge einer Seite des Quadrats ein: 5
Fläche des Quadrats = 20
Das obige Beispiel ist ein klassisches Beispiel für die Klassenform. Wir haben eine Basisklassenform und drei Klassen, d. H. Rechteck, Dreieck und Quadrat, werden daraus abgeleitet.
Wir haben eine Methode zum Lesen von Daten in der Shape-Klasse, während jede abgeleitete Klasse ihre eigene Methode zum Berechnen der Fläche hat. In der Hauptfunktion lesen wir Daten für jedes Objekt und berechnen dann die Fläche.
Fazit
Im Vergleich zu den anderen Programmiersprachen unterstützt die C ++ - Sprache alle Arten der Vererbung. In der Tat können wir sagen, dass C ++ die Vererbung sehr gut unterstützt. Mit C ++ können wir Echtzeitprobleme effektiver modellieren.
In diesem Tutorial haben wir alle von C ++ unterstützten Vererbungstypen gesehen.
Lesen Sie auch = >> Arten der Vererbung in Java
In unserem nächsten Tutorial erfahren Sie mehr über die Polymorphismus-Funktion von OOP.
=> Überprüfen Sie hier die komplette C ++ FREE-Schulungsserie.
Literatur-Empfehlungen
- Vererbung in C ++
- C ++ - Datentypen
- Arten von Risiken in Softwareprojekten
- Python-Datentypen
- Beste KOSTENLOSE C # Tutorial-Serie: Der ultimative C # -Handbuch für Anfänger
- Unix-Shell-Schleifentypen: Do While-Schleife, For-Schleife, bis Schleife in Unix
- Verschiedene Arten von Matchern von Mockito
- 7 Arten von Softwarefehlern, die jeder Tester kennen sollte