Konstruktør og Destruktør i Arv
Basisklassens konstruktør først
I sammenheng med arv spiller konstruktører en avgjørende rolle for å initialisere avledede klasser korrekt. Å forstå rekkefølgen konstruktører kalles i er nøkkelen til å forstå dynamikken i arv. Se på utdataene fra kodeeksemplet nedenfor for å se rekkefølgen på konstruktørkallene.
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; }
Når basisklassens konstruktør har fullført sin initialisering, kjøres konstruktøren til den avledede klassen.
Superklassen kalles først fordi den må initialisere de arvede medlemmene til subklassen. Dette sikrer at subklassen starter med en gyldig tilstand og kan stole på den initialiserte tilstanden til sin baseklasse.
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() { }
I eksemplet kaller du konstruktøren med parametere i initialiseringslisten. Du må eksplisitt kalle superklassens konstruktør innenfor initialiseringslisten til subklassens konstruktør. Hvis du ikke spesifiserer en baseklassekonstruktør i initialiseringslisten, kalles standardkonstruktøren til superklassen automatisk.
Destruktør for avledet klasse først
Når et objekt blir ødelagt, blir destruktører kalt i motsatt rekkefølge av sine konstruktører. Dette betyr at destruktører kalles for den mest avledede klassen først, deretter for hver baseklasse i motsatt rekkefølge av deres deklarasjon.
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; }
Først etter at destruktøren for avledet klasse har fullført sin opprydding, blir destruktøren for baseklassen kalt.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår