class ClassA
{
public:
ClassA() {cout << "ClassA()\r\n";}
~ClassA() {cout << "~ClassA()\r\n";}
void F1() {cout << "ClassA::F1()\r\n";}
virtual void F2() {cout << "ClassA::F2()\r\n";}
};
class ClassB : public ClassA
{
public:
ClassB() {cout << "ClassB()\r\n";}
~ClassB() {cout << "~ClassB()\r\n";}
void F1() {cout << "ClassB::F1()\r\n";}
void F2() {cout << "ClassB::F2()\r\n";}
};
void main(int argc, _TCHAR* argv[])
{
ClassA* pA = new ClassB();
pA->F1();
pA->F2();
delete pA;
cout << "\r\n";
ClassB B;
B.F1();
B.F2();
}
結果輸出:
ClassA() // 先調用A的構造函數
ClassB() // 再調用B的構造函數
ClassA::F1()
ClassB::F2()
~ClassA() // 調用A的析構函數
ClassA()
ClassB()
ClassB::F1()
ClassB::F2()
~ClassB() // 先調用B的析構函數
~ClassA() // 再調用A的析構函數
2、如果析構函數定義爲虛函數(類A中析構函數爲:virtual~ClassA() {cout << "~ClassA()\r\n";}),則輸出:
ClassA() // 先調用A的構造函數
ClassB() // 再調用B的構造函數
ClassA::F1()
ClassB::F2()
~ClassB() // 先調用B的析構函數
~ClassA() // 再調用A的析構函數
ClassA()
ClassB()
ClassB::F1()
ClassB::F2()
~ClassB() // 先調用B的析構函數
~ClassA() // 再調用A的析構函數