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 Vererbung
C++ OOP
course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Konstruktor und Destruktor in der Vererbung

Konstruktor der Basisklasse 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 entscheidend, um die Dynamik der Vererbung zu erfassen. Betrachten Sie die Ausgabe des folgenden Codeausschnitts, um die Reihenfolge der Konstruktoraufrufe zu sehen.

main.cpp

main.cpp

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; }
Note
Hinweis

Sobald der Konstruktor der Basisklasse seine Initialisierung abgeschlossen hat, wird der Konstruktor der abgeleiteten Klasse ausgeführt.

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

main.cpp

main.cpp

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 wird der Konstruktor mit Parametern in der Initialisierungsliste aufgerufen. Der Konstruktor der Oberklasse muss explizit innerhalb der Initialisierungsliste des Konstruktors der Unterklasse aufgerufen werden. Wenn im Initialisierer keine Basisklassen-Konstruktor angegeben wird, wird der Standardkonstruktor der Oberklasse automatisch aufgerufen.

Destruktor der abgeleiteten Klasse zuerst

Beim Zerstören eines Objekts werden Destruktoren in umgekehrter Reihenfolge zu den Konstruktoren aufgerufen. Das bedeutet, dass zuerst der Destruktor der am weitesten abgeleiteten Klasse und anschließend die Destruktoren der Basisklassen in umgekehrter Reihenfolge ihrer Deklaration ausgeführt werden.

main.cpp

main.cpp

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; }
Note
Hinweis

Erst nachdem der Destruktor der abgeleiteten Klasse seine Aufräumarbeiten abgeschlossen hat, wird der Destruktor der Basisklasse aufgerufen.

question mark

Was ist die korrekte Reihenfolge der Aufrufe von Konstruktoren und Destruktoren beim Erstellen und Zerstören eines Objekts einer abgeleiteten Klasse?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Konstruktor und Destruktor in der Vererbung

Konstruktor der Basisklasse 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 entscheidend, um die Dynamik der Vererbung zu erfassen. Betrachten Sie die Ausgabe des folgenden Codeausschnitts, um die Reihenfolge der Konstruktoraufrufe zu sehen.

main.cpp

main.cpp

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; }
Note
Hinweis

Sobald der Konstruktor der Basisklasse seine Initialisierung abgeschlossen hat, wird der Konstruktor der abgeleiteten Klasse ausgeführt.

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

main.cpp

main.cpp

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 wird der Konstruktor mit Parametern in der Initialisierungsliste aufgerufen. Der Konstruktor der Oberklasse muss explizit innerhalb der Initialisierungsliste des Konstruktors der Unterklasse aufgerufen werden. Wenn im Initialisierer keine Basisklassen-Konstruktor angegeben wird, wird der Standardkonstruktor der Oberklasse automatisch aufgerufen.

Destruktor der abgeleiteten Klasse zuerst

Beim Zerstören eines Objekts werden Destruktoren in umgekehrter Reihenfolge zu den Konstruktoren aufgerufen. Das bedeutet, dass zuerst der Destruktor der am weitesten abgeleiteten Klasse und anschließend die Destruktoren der Basisklassen in umgekehrter Reihenfolge ihrer Deklaration ausgeführt werden.

main.cpp

main.cpp

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; }
Note
Hinweis

Erst nachdem der Destruktor der abgeleiteten Klasse seine Aufräumarbeiten abgeschlossen hat, wird der Destruktor der Basisklasse aufgerufen.

question mark

Was ist die korrekte Reihenfolge der Aufrufe von Konstruktoren und Destruktoren beim Erstellen und Zerstören eines Objekts einer abgeleiteten Klasse?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 4
some-alt