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 Dog
Klasse von der Animal
Klasse abgeleitet. Da Dog
abgeleitet von Animal
, sind Mitglieder von Animal
zugänglich Dog
.

Beachten Sie die Verwendung des Schlüsselworts public
beim Erben von Hund von Tier.
class Dog : public Animal (… );
Wir können auch die Schlüsselwörter verwenden private
und protected
stattdessen public
. Wir werden lernen , über die Unterschiede zwischen der Verwendung private
, public
und protected
spä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 Dog
geerbt wird Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ geschützte Mitglieder
Der Zugriffsmodifikator protected
ist besonders relevant, wenn es um die C ++ - Vererbung geht.
Wie private
Mitglieder sind protected
Mitglieder außerhalb der Klasse nicht zugänglich. Auf sie kann jedoch von abgeleiteten Klassen und Freundklassen / -funktionen zugegriffen werden .
Wir benötigen protected
Mitglieder, 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 protected
und ist der Variablentyp von der abgeleiteten Klasse aus zugänglich Dog
. Wir können dies so sehen, wie wir es type
in der Dog
Klasse mit der Funktion initialisiert haben setType()
.
Andererseits kann die private
variable 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 protected
Schlüsselwort Daten verbirgt, können wir nicht direkt von einem Objekt Dog
oder einer Animal
Klasse 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 public
Schlüsselwort verwendet, um eine Klasse von einer zuvor vorhandenen Basisklasse zu erben. Wir können jedoch auch die Schlüsselwörter private
und 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:
- public: Wenn eine abgeleitete Klasse im
public
Modus deklariert wird , werden die Mitglieder der Basisklasse von der abgeleiteten Klasse genauso geerbt, wie sie sind. - privat: In diesem Fall werden alle Mitglieder der Basisklasse
private
Mitglieder in der abgeleiteten Klasse. - protected: Die
public
Mitglieder der Basisklasse werdenprotected
Mitglieder der abgeleiteten Klasse.
Die private
Mitglieder der Basisklasse befinden sich immer private
in 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