Konstruktor och Destruktor vid Arv
Basklassens konstruktor först
Inom arv spelar konstruktorer en avgörande roll för att korrekt initiera härledda klasser. Att förstå i vilken ordning konstruktorer anropas är avgörande för att förstå arvsdynamiken. Granska utdata från kodexemplet nedan för att se ordningen på konstruktorsanropen.
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 basklassens konstruktor har slutfört sin initiering, körs den härledda klassens konstruktor.
Superklassen anropas först eftersom den måste initiera de ärvda medlemmarna i subklassen. Detta säkerställer att subklassen startar i ett giltigt tillstånd och kan förlita sig på basklassens initierade tillstånd.
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 exemplet anropar du konstruktorn med parametrar i initieringslistan. Du måste uttryckligen anropa superklassens konstruktor inom initieringslistan för subklassens konstruktor. Om du inte anger en basklasskonstruktor i initieringslistan anropas standardkonstruktorn för superklassen automatiskt.
Härledd klassdestruktor först
När ett objekt förstörs anropas destruktorerna i omvänd ordning mot deras konstruktorer. Detta innebär att destruktorn för den mest härledda klassen anropas först, därefter för varje basklass i omvänd ordning mot deras deklaration.
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 efter att destruktorn för härledd klass har slutfört sin städning anropas destruktorn för basklass.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal