Рассмотрим порядок выполнения конструкторов/деструкторов, когда один класс наследуется другим. В таком случае конструкторы выполняются по порядку, начиная с самого базового класса. А когда происходит удаление объекта, то деструкторы выполняются начиная с вершины наследования (т.е. с самого последнего потомка)
![]() | |
| Порядок выполнения конструктора и деструктора при наследовании |
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "Constr A" << endl; }
~A() { cout << "Destr A" << endl; }
};
class B: public A
{
public:
B() { cout << "Constr B" << endl; }
~B() { cout << "Destr B" << endl; }
};
int main()
{
B b;
return 0;
}
Вывод:Constr A Constr B Destr B Destr A
В слуаче, когда класс наследует более одного предка, то конструкторы предков выполняются в порядке их объявления - слева на право. В то время как деструкторы предков будут выполнятсья в обратном порядке их объявления - справа налево.
![]() |
| Порядок выполнения конструктора и деструктора при множественном наследовании |
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "Constr A" << endl; }
~A() { cout << "Destr A" << endl; }
};
class B
{
public:
B() { cout << "Constr B" << endl; }
~B() { cout << "Destr B" << endl; }
};
class C: public A, public B
{
public:
C() { cout << "Constr C" << endl; }
~C() { cout << "Destr C" << endl; }
};
int main()
{
C c;
return 0;
}
Вывод:Constr A Constr B Constr C Destr C Destr B Destr AНа экран будет показано, что сначала выполнились конструкторы классов A, B, C, а потом выполнились деструкторы в порядке классов C, B, A.
Смотрите также:
Порядок выполнения конструктора и деструктора


Комментариев нет:
Отправить комментарий