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.
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.
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
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.
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
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.
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