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
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; }
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
123456789101112131415161718class 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
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; }
Pas nadat de destructor van de afgeleide klasse zijn opruimwerkzaamheden heeft voltooid, wordt de destructor van de basisklasse aangeroepen.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.13
Constructor en Destructor in Overerving
Veeg om het menu te tonen
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
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; }
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
123456789101112131415161718class 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
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; }
Pas nadat de destructor van de afgeleide klasse zijn opruimwerkzaamheden heeft voltooid, wordt de destructor van de basisklasse aangeroepen.
Bedankt voor je feedback!