C 子類構造和析構被時,父類構造和析構的呼叫順序

2021-07-25 03:25:56 字數 828 閱讀 3195

構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。

如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅在沒有顯式地宣告建構函式情況下建立。

構造原則如下:

1. 如果子類沒有定義構造方法,則呼叫父類的無引數的構造方法。

2. 如果子類定義了構造方法,不論是無引數還是帶引數,在建立子類的物件的時候

,首先執行父類無引數的構造方法,然後執行自己的構造方法。

3. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式,則會呼叫父類的預設無參建構函式。

4. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式且父類自己提供了無參建構函式,則會呼叫父類自己的無參建構函式。

5. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式且父類只定義了自己的有參建構函式,則會出錯(如果父類只有有引數的構造方法,則子類必須顯示呼叫此帶參構造方法)。

6. 如果子類呼叫父類帶引數的構造方法,需要用初始化父類成員物件的方式,比如:

#include class animal

{ public:

animal(int height, int weight)

{ cout<<"animal construct"《在

fish

類的建構函式後,加乙個冒號(

:),然後加上父類的帶引數的建構函式。這樣,在子類的建構函式被呼叫時,系統就會去呼叫父類的帶引數的建構函式去構造物件。

C 子類呼叫父類構造和析構函式的順序

include using namespace std class a class b public a int main 列印的結果是 construct a a construct b b destruct a a 一般情況下構造函式呼叫父類 子類 析構函式呼叫子類 父類 比如這麼寫 b a n...

子類繼承和呼叫父類的構造 析構函式方法

先呼叫基類的建構函式,再呼叫派生類的建構函式就像蓋樓的時候先從地基開始,然後第一層,第二層。如果是析構 析構函式需要是是虛函式 那麼先呼叫派生類的析構函式,再呼叫基類的析構函式就像拆樓的時候想從最高層開始拆,然後往下一直到第一層 子類繼承和呼叫父類的構造方法 1.如果子類沒有定義構造方法,則呼叫父類...

子類構造和析構被執行時是否呼叫父類以及呼叫順序

子類被構造的時候回先呼叫父類的建構函式 子類析構的 時候先析構子類後析構父類 如果直接用子類構造乙個父類的物件,刪除這個父類的物件不會呼叫子類的析構函式 父類的析構函式為虛函式除外 示例 a是乙個父類 析構函式不是虛函式 class a a b是a的子類 class b public a b c是乙...