當前位置:成語大全網 - 新華字典 - c++ 簡單問題

c++ 簡單問題

1、A *P=new B;

首先new是在系統堆中分配壹個永久的內存,內存的大小與B的尺寸相同。

然後調用B的構造函數構造B對象的實例。

最後將新構造的B實例的指針記錄到A *P中。

雖然P是A類型的指針,但是真實的實例還是B特征的,只是B是A的派生類,所以B也具有A的通用特征。

這裏用指針表示,壹般是為了調用壹些通用特征。並且不會對真實的B實例進行切割。如果使用類似B b;A a=b;那麽最終的a就已經對b產生了切割。具體以後學習就會慢慢知道了。

2、整體調用順序:

A、首先調用B的構造函數;

B、B的構造函數開始執行時,首先會執行A的構造函數,然後才執行B的構造函數的執行體。

B的構造函數是開始執行的入口,但是剛進入口後的第壹步是執行A的構造函數,然後才繼續B的構造函數實現語句。

C、析構函數由於是虛函數,所以delete時,會先執行B的析構函數,然後執行A的析構函數,最後結束。註意:如果析構函數全都不是虛函數,那麽並不會調用B的析構函數。

3、測試代碼:

class A

{

public:

A()

{

printf("This is A Constructor!\n");

}

virtual ~A()

{

printf("This is A Destructor!\n");

}

};

class B : public A

{

public:

B()

{

printf("This is B Constructor!\n");

}

virtual ~B()

{

printf("This is B Destructor!\n");

}

};

int main(int argc, char* argv[])

{

A *pa = new B;

delete pa;

return 0;

}

4、測試結果輸出:

This is A Constructor!

This is B Constructor!

This is B Destructor!

This is A Destructor!