有三個類A,B,C。B是A的子類,C又是B的子類。代碼如下:
class A
{
public:
A(){ cout << "new A " << endl; }
~A(){cout << "delete A" << endl;}
};
class B : public A
{
public:
B(){cout << "new B " << endl;};
~B(){cout << "delete B" << endl;};
};
class C : public B
{
public:
C(){cout << "new C " << endl;}
~C(){cout << "delete C" << endl;};
};
以下是測試代碼以及輸出的結果:
第一個(p1)就不用說了,new一個A,然後再delete;
第二個(p2)new了一個C,構造函數從C的祖先開始向下構造,析構的時候在從C開始向上構造;
第三個(p3) (和第四個類似,直接參考第四個);
第三個(p3)new了一個C,構造函數從C的祖先開始向下構造,然後賦給指針p4,但是p4是B型的,是以new出的類飲食轉換為B類型,是以析構的時候是從B開始向上構造。