C ++ Vererbung

In diesem Tutorial lernen wir anhand von Beispielen die Vererbung in C ++ kennen.

Vererbung ist eines der Hauptmerkmale der objektorientierten Programmierung in C ++. Es ermöglicht uns, eine neue Klasse (abgeleitete Klasse) aus einer vorhandenen Klasse (Basisklasse) zu erstellen.

Die abgeleitete Klasse erbt die Features von der Basisklasse und kann zusätzliche eigene Features haben. Beispielsweise,

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Hier wird die DogKlasse von der AnimalKlasse abgeleitet. Da Dogabgeleitet von Animal, sind Mitglieder von Animalzugänglich Dog.

Vererbung in C ++

Beachten Sie die Verwendung des Schlüsselworts publicbeim Erben von Hund von Tier.

 class Dog : public Animal (… );

Wir können auch die Schlüsselwörter verwenden privateund protectedstattdessen public. Wir werden lernen , über die Unterschiede zwischen der Verwendung private, publicund protectedspäter in diesem Tutorial.

ist-eine Beziehung

Vererbung ist eine Beziehung . Wir verwenden die Vererbung nur, wenn zwischen den beiden Klassen eine Is-A-Beziehung besteht.

Hier sind einige Beispiele:

  • Ein Auto ist ein Fahrzeug.
  • Orange ist eine Frucht.
  • Ein Chirurg ist ein Arzt.
  • Ein Hund ist ein Tier.

Beispiel 1: Einfaches Beispiel für C ++ - Vererbung

 // C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )

Ausgabe

Ich kann essen! Ich kann schlafen! Ich kann bellen! Wau-Wau!!

Hier kann dog1 (das Objekt der abgeleiteten Klasse Dog) auf Mitglieder der Basisklasse zugreifen Animal. Es ist, weil von Doggeerbt wird Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

C ++ geschützte Mitglieder

Der Zugriffsmodifikator protectedist besonders relevant, wenn es um die C ++ - Vererbung geht.

Wie privateMitglieder sind protectedMitglieder außerhalb der Klasse nicht zugänglich. Auf sie kann jedoch von abgeleiteten Klassen und Freundklassen / -funktionen zugegriffen werden .

Wir benötigen protectedMitglieder, wenn wir die Daten einer Klasse ausblenden möchten, diese Daten aber dennoch von den abgeleiteten Klassen geerbt werden sollen.

Weitere Informationen zu protected finden Sie in unserem Tutorial zu C ++ Access Modifiers.

Beispiel 2: C ++ geschützte Mitglieder

 // C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )

Ausgabe

Ich kann essen! Ich kann schlafen! Ich kann bellen! Wau-Wau!! Ich bin ein Säugetier. Meine Farbe ist schwarz

Hier ist protectedund ist der Variablentyp von der abgeleiteten Klasse aus zugänglich Dog. Wir können dies so sehen, wie wir es typein der DogKlasse mit der Funktion initialisiert haben setType().

Andererseits kann die privatevariable Farbe nicht in initialisiert werden Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

Da das protectedSchlüsselwort Daten verbirgt, können wir nicht direkt von einem Objekt Dogoder einer AnimalKlasse auf den Typ zugreifen .

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Zugriffsmodi in C ++ Vererbung

In unseren vorherigen Tutorials haben wir uns mit C ++ - Zugriffsspezifizierern wie "öffentlich", "privat" und "geschützt" vertraut gemacht.

Bisher haben wir das publicSchlüsselwort verwendet, um eine Klasse von einer zuvor vorhandenen Basisklasse zu erben. Wir können jedoch auch die Schlüsselwörter privateund verwenden protected, um Klassen zu erben. Beispielsweise,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

Die verschiedenen Möglichkeiten, Klassen abzuleiten, werden als Zugriffsmodi bezeichnet . Diese Zugriffsmodi haben folgenden Effekt:

  1. public: Wenn eine abgeleitete Klasse im publicModus deklariert wird , werden die Mitglieder der Basisklasse von der abgeleiteten Klasse genauso geerbt, wie sie sind.
  2. privat: In diesem Fall werden alle Mitglieder der Basisklasse privateMitglieder in der abgeleiteten Klasse.
  3. protected: Die publicMitglieder der Basisklasse werden protectedMitglieder der abgeleiteten Klasse.

Die privateMitglieder der Basisklasse befinden sich immer privatein der abgeleiteten Klasse.

Weitere Informationen finden Sie in unserem öffentlichen, privaten und geschützten C ++ - Tutorial zur Vererbung.

In der Vererbung überschreibende Elementfunktion

Angenommen, die Basisklasse und die abgeleitete Klasse haben Elementfunktionen mit demselben Namen und denselben Argumenten.

Wenn wir ein Objekt der abgeleiteten Klasse erstellen und versuchen, auf diese Elementfunktion zuzugreifen, wird die Elementfunktion in der abgeleiteten Klasse anstelle der in der Basisklasse aufgerufen.

Die Elementfunktion der abgeleiteten Klasse überschreibt die Elementfunktion der Basisklasse.

Weitere Informationen zum Überschreiben von Funktionen in C ++.

Empfohlene Lektüre: C ++ Multiple Inheritance

Interessante Beiträge...