繼承中構造析構

2021-10-05 11:29:22 字數 751 閱讀 8471

在繼承中面臨乙個問題就是:我們的基類和派生類都有各自的建構函式和析構函式,那麼再例項化派生類成員的時候,這個構造析構的順序是怎麼樣的呢?

class

animal

~animal()

void

setm

(int a =0)

intgetage()

private

:int age;

};

我們構造了個動物類,我們需要繼續構造類來實現動物

class

dog:

public animal

dog()~

dog()}

;

觀察這段**,我們的動物類有自己的構造方法和析構方法,當然狗類也有,我們來看呼叫順序。

dog d;

d.setd(2

);

出現結果

這裡我們指明,繼承不會繼承基類的建構函式,在建立這個d物件的時候,系統只會執行派生類的建構函式,不會執行基類的建構函式,如果基類的建構函式包含對變數的初始化,建立派生類物件的時候,要考慮派生類所增加的變數的初始化,也要考慮基類變數的初始化。

當基類的建構函式有帶引數的建構函式的時候,派生類的建構函式必須宣告所有的引數。

當基類建構函式不帶引數時,派生類不一定需要定義建構函式,然而當基類的建構函式至少乙個引數,它所有的派生類都不必須定義建構函式。

繼承中的構造與析構

賦值相容性原則 子類物件可以當作父類物件使用 子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 子類是就是特殊的父類!class child public parent int main int argc,char argv ...

繼承中的構造和析構

子類的建構函式必須對繼承而來的成員進行初始化 1.直接通過初始化列表或者賦值的方式進行初始 2.呼叫父類建構函式進行初始化 父類建構函式在子類中的呼叫方式 1.預設呼叫.適用無參建構函式和使用預設引數的建構函式 2.顯示呼叫.通過初始化列表進行呼叫,適用於所有父類的建構函式 例子 class chi...

繼承的構造與析構

子類物件在構造時,先呼叫父類的建構函式,然後再呼叫自己的建構函式,析構順序相反。看下測試 include include using namespace std class grandparent public grandparent cout 輸出結果如下 結果很明顯了,子類構造時,先呼叫父親的建...