Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Konstruktor und Destruktor in der Vererbung | Überblick Über die Vererbung
C++ OOP
course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Kapselungsübersicht
4. Überblick Über die Vererbung
5. Überblick Über Polymorphismus

book
Konstruktor und Destruktor in der Vererbung

Basisklassenkonstruktor zuerst

Im Kontext der Vererbung spielen Konstruktoren eine entscheidende Rolle bei der korrekten Initialisierung abgeleiteter Klassen. Das Verständnis der Reihenfolge, in der Konstruktoren aufgerufen werden, ist der Schlüssel zum Verständnis der Vererbungsdynamik. Schauen Sie sich die Ausgabe des untenstehenden Code-Snippets an, um die Reihenfolge der Konstruktoraufrufe zu sehen.

cpp

main

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }

Merken

Sobald der Basisklassen-Konstruktor seine Initialisierung abgeschlossen hat, wird der abgeleitete Klassen-Konstruktor ausgeführt.

Die Superklasse wird zuerst aufgerufen, da sie die geerbten Mitglieder der Unterklasse initialisieren muss. Dies stellt sicher, dass die Unterklasse mit einem gültigen Zustand beginnt und sich auf den initialisierten Zustand ihrer Basisklasse verlassen kann.

cpp

main

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

Im Beispiel rufen wir den Konstruktor mit Parametern in der Initialisierungsliste auf. Sie müssen den Superklassen-Konstruktor explizit innerhalb der Initialisierungsliste des Unterklassen-Konstruktors aufrufen. Wenn Sie keinen Basisklassenkonstruktor in der Initialisierungsliste angeben, wird der Standardkonstruktor der Superklasse automatisch aufgerufen.

Destruktor der abgeleiteten Klasse zuerst

Wenn ein Objekt zerstört wird, werden Destruktoren in umgekehrter Reihenfolge ihrer Konstruktoren aufgerufen. Das bedeutet, dass Destruktoren zuerst für die am meisten abgeleitete Klasse und dann für jede Basisklasse in umgekehrter Reihenfolge ihrer Deklaration aufgerufen werden.

cpp

main

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }

Merken

Erst nachdem der Basisklassen-Destruktor seine Bereinigung abgeschlossen hat, wird der abgeleitete Klassen-Destruktor aufgerufen.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 4
We're sorry to hear that something went wrong. What happened?
some-alt