Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 1 von 213/18 im Kurs~12 min
Lektionen des Moduls (1/2)

Vererbung in C++

Vererbung (Inheritance) ist eine der Säulen der objektorientierten Programmierung (OOP). Sie ermöglicht es einer neuen Klasse (abgeleitete Klasse oder Kindklasse genannt), die Mitglieder (Attribute und Methoden) einer bestehenden Klasse (Basisklasse oder Elternklasse genannt) zu übernehmen, was die Wiederverwendbarkeit des Codes fördert.

Grundlegende Syntax

In C++ wird die Vererbung durch den Operator : nach dem Namen der abgeleiteten Klasse angegeben, gefolgt von der Zugriffsart (meist public) und dem Namen der Basisklasse.

Code
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessibile dalle classi derivate
};

// Rectangle eredita public-mente da Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

Zugriffsmodifikatoren: protected

Zusätzlich zu public und private führt die Vererbung den Zugriffsmodifikator protected ein:

  • Auf private-Mitglieder der Basisklasse kann von der abgeleiteten Klasse nicht direkt zugegriffen werden.
  • Auf protected-Mitglieder der Basisklasse kann von außen nicht zugegriffen werden, sie sind jedoch innerhalb von abgeleiteten Klassen direkt zugänglich.

Initialisierung der Basisklasse

Konstruktoren werden nicht automatisch vererbt. Wenn eine abgeleitete Klasse instanziiert wird, wird zuerst der Konstruktor der Basisklasse aufgerufen. Wenn die Basisklasse Argumente erfordert, müssen wir sie explizit in der Member Initializer List des abgeleiteten Konstruktors aufrufen.

Code
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Chiamata esplicita al costruttore Parent
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

Probier es aus

Übung#cpp.m6.l1.e1
Versuche: 0Wird geladen…

Erstelle eine Klasse Dog, die im Modus public von der Klasse Animal erbt. Die Klasse Dog muss eine öffentliche Methode play() enthalten, die 'Playing' mit std::cout ausgibt.

Editor wird geladen…
Hinweis anzeigen

Verwende die Syntax `:` gefolgt von `public Animal`, um die Basisklasse zu erweitern, und schreibe dann die Methode `play()`.

Lösung nach 3 Versuchen verfügbar

Übung#cpp.m6.l1.e2
Versuche: 0Wird geladen…

Vervollständige die Klasse Car, indem du von Vehicle erbst. Schreibe einen Konstruktor für Car, der einen std::string b akzeptiert und diesen über die Initialisierungsliste an den Konstruktor von Vehicle übergibt.

Editor wird geladen…
Hinweis anzeigen

Verwende im Konstruktor von `Car`, die Syntax `: Vehicle(b)` direkt nach den runden Klammern der Parameter, um die Initialisierung der Marke (brand) an die Basisklasse zu delegieren.

Lösung nach 3 Versuchen verfügbar