第46課 繼承中的構造與析構

2021-10-03 06:33:30 字數 2239 閱讀 1303

本文內容來自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結

子類物件的構造

子類中可以定義建構函式

子類建構函式

必須對繼承而來的成員進行初始化

直接通過初始化列表 或者 賦值的方式 進行初始

呼叫父類建構函式 進行初始化

父類建構函式在子類中的呼叫方式

預設呼叫:

*適用於無參建構函式 和 使用預設引數的建構函式

顯示呼叫:

通過 初始化列表 進行呼叫

適用於 所有 父類建構函式

父類建構函式的呼叫

程式設計實驗

我們來寫乙個程式,列印父類和子類建構函式的呼叫順序

#include

using

namespace std;

class

parent

parent

(string s)

~parent()

};class

child

:public parent

child

(string s)

~child()

};intmain()

執行結果

實驗結果:子類物件會預設呼叫父類的預設無參建構函式

下面我們來改寫程式通過初始化列表顯式呼叫 指定的父類建構函式

執行結果

構造規則

子類物件在建立時會 首先呼叫父類的建構函式

先執行父類建構函式 再執行子類的建構函式

父類建構函式可以被隱式呼叫或者顯示呼叫

物件建立時建構函式的呼叫順序

1.呼叫父類的建構函式

2.呼叫變數的建構函式

3.呼叫類自身的建構函式

口訣心法: 先父母,後客人,再自己。

程式設計實驗

我們來編寫乙個程式,驗證物件的構造函式呼叫順序

#include

#include

using

namespace std;

class

object};

class

parent

:public object

parent

(string s)

:object

(s)}

;class

child

:public parent

child

(string s)

:parent

(s),

mo1(s +

" 1"),

mo2(s +

" 2")}

;int

main()

執行結果

實驗結果:與上面描述的呼叫順序一致。

子類物件的析構

析構函式 的呼叫順序與建構函式相反

1.執行自身的 析構函式

2.執行成員變數的 析構函式

3.執行父類的 析構函式

小結

子類物件在建立時需要呼叫父類建構函式 進行初始化

先執行父類建構函式 然後再執行成員的建構函式

父類建構函式顯示呼叫需要在初始化列表中進行

子類物件在銷毀時需要呼叫父類析構函式 進行清理

析構順序 與 構造順序對稱相反

第46課 繼承中的構造與析構

1.1 子類中可以定義建構函式 1.2 子類建構函式,必須 對繼承而來的成員進行 初始化 有兩種方式 1.2.1 直接通過 初始化列表 進行初始化或 賦值的方式 進行初始化 1.2.2 呼叫父類建構函式 進行初始化 1.3 父類建構函式在子類中呼叫方式 1.3.1 預設呼叫 適用於 無參建構函式 和...

46 繼承中的構造與析構

問題 如何初始化父類成員?父類建構函式和子類建構函式有什麼關係?必須對繼承而來的成員進行初始化 父類建構函式在子類中呼叫方式 父類建構函式的呼叫 class child public parent child string s parent parameter to parent 範例 子類的建構函...

繼承中的構造與析構

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