* 基类、派生类、成员对象构造函数调用顺序
构造时:基类构造函数[a1,a2]→对象成员构造函数[声明顺序 a,b]→派生类本身的构造函数c
析构时:派生类本身的析构函数c→对象成员析构函数[声明反序b,a]→基类析构函数[a2,a1]
#include <iostream>
class Base
{
public:Base();~Base();private:};Base::Base()
{std::cout << "Base\n";
}Base::~Base()
{std::cout << "~Base\n";
}class ABase
{
public:ABase();~ABase();private:};ABase::ABase()
{std::cout << "Abase\n";
}ABase::~ABase()
{std::cout << "~Abase\n";
}class Bbase
{
public:Bbase();~Bbase();private:};Bbase::Bbase()
{std::cout << "Bbase\n";
}Bbase::~Bbase()
{std::cout << "~Bbase\n";
}class CBase : public Base
{
public:CBase();~CBase();private:ABase a1;Bbase b1;
};CBase::CBase()
{std::cout << "CBase\n";
}CBase::~CBase()
{std::cout << "~CBase\n";
}int main()
{CBase test;}
输出结果:
Base
Abase
Bbase
CBase
~CBase
~Bbase
~Abase
~Base