這裡探究繼承與複合關系下的構造與析構次序,是看侯捷先生的C++留下的問題。
第一種關系:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TPRVWboJjWxYUbiZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN4cTOzgzMxIDNyQDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
#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 ;
}
結論:這種關系下,先執行父類構造函數,再執行複合類的構造函數,最後執行本類的構造函數。而析構次序反之。
第二種關系:
根據前面的結論推測:先執行Component的構造函數,再執行Base的構造函數,最後執行Derived的構造函數。