先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象:
static int nIndex = 1;
class CMember
{
public:
CMember()
{
printf("%d CMember construct\n", nIndex++);
}
~CMember()
{
printf("%d CMember destruction\n", nIndex++);
}
};
class CBase
{
public:
CBase()
{
printf("%d CBase construction\n", nIndex++);
}
~CBase()
{
printf("%d CBase destruction\n", nIndex++);
}
};
class CTEST : public CBase
{
//Method:
public:
CTEST()
{
printf("%d CTEST construct\n", nIndex++);
}
~CTEST()
{
printf("%d CTEST destruction\n", nIndex++);
}
CMember m_oMember; //测试成员对象构造和析构顺序
};
测试代码:
int main(int argc, char* argv[])
{
if (true)
{
CTEST oTest;
}
getchar();
return 0;
}
运行结果:
1、构造顺序
基类→成员对象类→对象自身
2、析构顺序(与构造顺序相反)
对象自身→成员对象类→基类