суббота, 10 декабря 2011 г.

Порядок выполнения конструктора и деструктора при наследовании


Рассмотрим порядок выполнения конструкторов/деструкторов, когда один класс наследуется другим. В таком случае конструкторы выполняются по порядку, начиная с самого базового класса. А когда происходит удаление объекта, то деструкторы выполняются начиная с вершины наследования (т.е. с самого последнего потомка)

Порядок выполнения конструктора и деструктора при наследовании

#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.


Смотрите также:
Порядок выполнения конструктора и деструктора

Комментариев нет:

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