Arbeiten mit Vererbung in C ++

In diesem Tutorial gehen wir auf die Vererbung in C ++ ein , ein sehr interessantes Thema, das wir anhand eines einfachen Beispiels betrachten. Für Windows-Benutzer, die eine IDE herunterladen können, um sie zu programmieren, wird sie Ihnen beim Kompilieren und Ausführen der Programme helfen. Wir lassen den folgenden Link:

DEVC ++

Hier verwenden wir Linux , insbesondere Ubuntu, das bereits einen Compiler für C ++ hat. Wie wahrscheinlich jeder weiß, erlaubt die C ++ – Sprache eine Mehrfachvererbung, im Gegensatz zu Java , das nur eine einfache Vererbung zulässt, und wenn wir etwas Ähnliches wollen, müssen wir Schnittstellen ziehen, am Ende ist es weniger fehleranfällig.

Das Hauptbeispiel, das wir hier zeigen werden, um die Vererbung in C ++ zu sehen, ist einfach. Wir werden nicht auf die Mehrfachvererbung eingehen, außer am Ende, um einen Fehler anzuzeigen, von dem wir betroffen sein können.

1. Einfache Vererbung in C ++

Um mit dem ersten Beispiel, der einfachen Vererbung, zu beginnen, haben wir eine Animal- Klasse, die unsere Basisklasse oder unser Vater ist, und zwei Klassen, die erben, Dog , die keinen Code haben, und Cat , die der übergeordneten Klasse einen neuen Parameter hinzufügen. Sehen wir uns den Code an (er ist kurz):

 #include <iostream> using namespace std; Klasse Tier { privat: int age; Publikum: Tier (int a = 1) { Alter = a; }; int getAge () const {return age;} void setAge (int a = 9) { Alter = a; } }; Klasse Hund: öffentliches Tier {}; Klasse Katze: öffentliches Tier { privat: Schwimmergewicht; Publikum: Katze (int a = 2, float w = 3,2): Tier {a { gewicht = w; } float getWeight () const {return weight;} }; int main () { Hund mastin; cout << "____DOG____" << endl; cout << "Before:" << mastin.getAge () << endl; mastin.setAge (2); cout << "After:" << mastin.getAge () << endl; Cat Miau (3, 4,1); cout << "____CAT____" << endl; cout << miau.getAge () << "" << miau.getWeight () << endl; } 

Wir gehen davon aus, dass Sie bereits etwas über C ++ wissen, um Vererbungsprobleme zu erkennen. Daher werden die Teile von Funktionen oder öffentliche und private Parteien nicht erläutert. Um von einer Klasse zu erben, haben wir folgende Syntax:

 class class_child: public class_father 

In unserem Beispiel zum Erstellen der Dog- Klasse haben wir Folgendes verwendet:

 Hundeklasse: Öffentliches Tier 

Gibt an, dass Dog von Animal erbt. Alles, was die Animal-Klasse in ihren öffentlichen oder geschützten Blöcken enthält, können wir verwenden. Wenn wir jedoch den privaten Block verwenden, wird eine Fehlermeldung ausgegeben. Nun, die Hundeklasse ist leer, es gibt also keine großen Schwierigkeiten.

See also  PHP-Sessions im Detail

Wenn wir zur Cat- Klasse übergehen, haben wir die gleiche Klassendeklaration wie zuvor, abgesehen davon, dass es eine neue variable Gewichtung hinzufügt, es ist weder die Animal- Klasse noch der Hund variabel. Hier im Konstruktor der Klasse haben wir den Konstruktor der Elternklasse aufgerufen, also übergeben wir die Daten für das variable Alter und füllen auch das variable Gewicht .

Hinweis
Sie können sehen, dass die Parameter, die wir an die Funktionen übergeben, einen Standardwert haben können.

In der Hauptsache erstellen wir ein Objekt der Klasse Dog , lassen standardmäßig das Alter stehen und zeigen es an. Später verwenden wir die Funktion setAge , um das Alter zu ändern und zeigen es erneut an. Schließlich erstellen wir ein Objekt der Cat- Klasse, und dieses Mal lassen wir die Variablen keine Standardwerte haben und übergeben sie, um das Objekt zu erstellen, und variieren sie nicht.

Wenn wir diesen Code in einem Linux-Terminal mit g ++ ausführen möchten, gehen wir wie folgt vor:

 g ++ -o test tesc.gcc 

Und um es ganz einfach auszuführen:

 ./test 

Wir werden ein Capture mit der Kompilierung und Ausführung des kleinen Codes zeigen:

heritage-simple-c ++ - 1.jpg

2. Mehrfachvererbung in C ++

Um die Gefahren einer Mehrfachvererbung zu erkennen, hinterlassen wir einen sehr kleinen Code:

 #include <iostream> using namespace std; Klasse Tier { Publikum: nichtig zu gehen () { cout << "Walking in Animal" << endl; } }; Klasse Mamifero { Publikum: nichtig zu gehen () { cout << "Walking in Mamifero" << endl; } }; Klasse Hund: öffentliches Tier, öffentlicher Mamifero {}; int main () { Hund Hund; dog.caminar (); } 

Wir sehen, dass Dog von Animal und Mammal erbt und beide Klassen die gleiche Funktion haben, wenn ich die normale Funktion wie im Code verwende:

 dog.caminar () 

Und kompilieren wir erhalten den folgenden Fehler:

See also  Zeigen Sie die MAC-Adresse von Windows 10, MacOS, Linux oder Android an

Fehler-Vererbung-multiple-2.jpg

Um es zu lösen, können wir die folgende Syntax verwenden, um die Animal- Funktion aufzurufen:

 dog.Animal :: walk (); 

oder um die der Mamifero- Klasse zu benutzen:

 dog.Mamifero :: walk (); 

Und natürlich ist es die beste Lösung, nicht zwei Funktionen mit demselben Namen zu haben, wenn wir von Mehrfachvererbung Gebrauch machen wollen. In diesem Programm ist es sehr einfach, eine Lösung zu geben, aber in einer großen kann es zu Kopfschmerzen kommen.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *