天天看点

继承(Inheritance)与复合(Composition)关系下的构造与析构

这里探究继承与复合关系下的构造与析构次序,是看侯捷先生的C++留下的问题。

第一种关系:

继承(Inheritance)与复合(Composition)关系下的构造与析构
#include <iostream>
using namespace std;
class Base
{
public:
    Base()
    {
        cout << "ctor of base" << endl;
    }
    ~Base()
    {
        cout << "dtor of base" << endl;
    }
};
class Component
{
public:
    Component()
    {
        cout << "ctor of component" << endl;
    }
    ~Component()
    {
        cout << "dtor of component" << endl;
    }
};
class Derived : public Base
{
public:
    Derived()
    {
        cout << "ctor of derived" << endl;
    }
    ~Derived()
    {
        cout << "dtor of derived" << endl;
    }
protected:
    Component c;
private:
};
void objectplay(void)//通过调用这个函数观察对象的析构与构造函数
{
    Derived d;
}
int main()
{
    objectplay();
    system("pause");
    return ;
}
           
继承(Inheritance)与复合(Composition)关系下的构造与析构

结论:这种关系下,先执行父类构造函数,再执行复合类的构造函数,最后执行本类的构造函数。而析构次序反之。

第二种关系:

继承(Inheritance)与复合(Composition)关系下的构造与析构

根据前面的结论推测:先执行Component的构造函数,再执行Base的构造函数,最后执行Derived的构造函数。

继续阅读