这里探究继承与复合关系下的构造与析构次序,是看侯捷先生的C++留下的问题。
第一种关系:
#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 0;
}
结论:这种关系下,先执行父类构造函数,再执行复合类的构造函数,最后执行本类的构造函数。而析构次序反之。
第二种关系:
根据前面的结论推测:先执行Component的构造函数,再执行Base的构造函数,最后执行Derived的构造函数。