Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Constructor en Destructor in Overerving | Overzicht van Overerving
C++ OOP
course content

Cursusinhoud

C++ OOP

C++ OOP

1. Fundamenten van OOP in C++
2. Constructors en Destructors
3. Overzicht van Encapsulatie
4. Overzicht van Overerving
5. Overzicht van Polymorfisme

book
Constructor en Destructor in Overerving

Eerst de Constructor van de Basisklasse

In de context van overerving spelen constructors een essentiële rol bij het correct initialiseren van afgeleide klassen. Inzicht in de volgorde waarin constructors worden aangeroepen is cruciaal om de dynamiek van overerving te begrijpen. Bekijk de uitvoer van het onderstaande codefragment om de volgorde van constructor-aanroepen te zien.

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
Opmerking

Zodra de constructor van de Basisklasse zijn initialisatie heeft voltooid, wordt de constructor van de Afgeleide Klasse uitgevoerd.

De superklasse wordt eerst aangeroepen omdat deze de geërfde leden van de subklasse moet initialiseren. Dit zorgt ervoor dat de subklasse begint met een geldige toestand en kan vertrouwen op de geïnitialiseerde toestand van zijn basisklasse.

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() { }

In het voorbeeld roept u de constructor met parameters aan in de initializer list. U moet expliciet de constructor van de superklasse aanroepen binnen de initializer list van de constructor van de subklasse. Als u geen constructor van de basisklasse specificeert in de initializer list, wordt de standaardconstructor van de superklasse automatisch aangeroepen.

Destructor van afgeleide klasse eerst

Wanneer een object wordt vernietigd, worden destructors aangeroepen in de omgekeerde volgorde van hun constructors. Dit betekent dat destructors eerst worden aangeroepen voor de meest afgeleide klasse, daarna voor elke basisklasse in omgekeerde volgorde van hun declaratie.

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
Opmerking

Pas nadat de destructor van de afgeleide klasse zijn opruimwerkzaamheden heeft voltooid, wordt de destructor van de basisklasse aangeroepen.

question mark

Wat is de juiste volgorde van aanroepen van constructors en destructors bij het maken en vernietigen van een object van een afgeleide klasse?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

course content

Cursusinhoud

C++ OOP

C++ OOP

1. Fundamenten van OOP in C++
2. Constructors en Destructors
3. Overzicht van Encapsulatie
4. Overzicht van Overerving
5. Overzicht van Polymorfisme

book
Constructor en Destructor in Overerving

Eerst de Constructor van de Basisklasse

In de context van overerving spelen constructors een essentiële rol bij het correct initialiseren van afgeleide klassen. Inzicht in de volgorde waarin constructors worden aangeroepen is cruciaal om de dynamiek van overerving te begrijpen. Bekijk de uitvoer van het onderstaande codefragment om de volgorde van constructor-aanroepen te zien.

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
Opmerking

Zodra de constructor van de Basisklasse zijn initialisatie heeft voltooid, wordt de constructor van de Afgeleide Klasse uitgevoerd.

De superklasse wordt eerst aangeroepen omdat deze de geërfde leden van de subklasse moet initialiseren. Dit zorgt ervoor dat de subklasse begint met een geldige toestand en kan vertrouwen op de geïnitialiseerde toestand van zijn basisklasse.

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() { }

In het voorbeeld roept u de constructor met parameters aan in de initializer list. U moet expliciet de constructor van de superklasse aanroepen binnen de initializer list van de constructor van de subklasse. Als u geen constructor van de basisklasse specificeert in de initializer list, wordt de standaardconstructor van de superklasse automatisch aangeroepen.

Destructor van afgeleide klasse eerst

Wanneer een object wordt vernietigd, worden destructors aangeroepen in de omgekeerde volgorde van hun constructors. Dit betekent dat destructors eerst worden aangeroepen voor de meest afgeleide klasse, daarna voor elke basisklasse in omgekeerde volgorde van hun declaratie.

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
Opmerking

Pas nadat de destructor van de afgeleide klasse zijn opruimwerkzaamheden heeft voltooid, wordt de destructor van de basisklasse aangeroepen.

question mark

Wat is de juiste volgorde van aanroepen van constructors en destructors bij het maken en vernietigen van een object van een afgeleide klasse?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4
some-alt