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

2021-08-14 19:58:08 字數 2247 閱讀 1498

1.1、

子類中可以定義建構函式

1.2、

子類建構函式,必須

對繼承而來的成員進行

初始化

,有兩種方式

1.2.1、

直接通過

初始化列表

進行初始化或

賦值的方式

進行初始化

1.2.2、

呼叫父類建構函式

進行初始化

1.3、

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

1.3.1、

預設呼叫:適用於

無參建構函式

和使用預設引數

的建構函式

1.3.2、

顯式呼叫:通過

初始化列表進行呼叫

,適用於所有父類建構函式

/*************************     子類的構造初探      **********/

#include

#include

using namespace std;

class parent

parent(string s)

};class child : public parent

//在初始化列表中顯示呼叫父類帶參的parent(string s)建構函式,如果不顯示呼叫,則會預設呼叫父類無參的parent()建構函式

child(string s) : parent(s)

};int main()

2.1、

子類物件在建立時會

首先呼叫父類的建構函式

2.2、

先執行父類建構函式,

再執行子類的建構函式

2.3、父類建構函式可以被

隱式呼叫顯式呼叫

3.1、

先呼叫父類的建構函式

3.2、

再呼叫成員變數的建構函式(注意,

這裡的順序與成員變數宣告順序相同

)3.3、

最後呼叫類

自身的建構函式

4.1、

先執行自身的析構函式

4.2、

再執行成員變數的析構函式

4.3、

最後執行

父類的析構函式

/**********物件的構造和析構深度解析********/

#include

#include

using namespace std;

class object

~object()

};class parent : public object

parent(string s): object(s)

~parent()

};class child : public parent

//在初始化列表中顯示呼叫父類帶參的parent(string s)建構函式,並對成員變數mo1和mo2進行初始化。

child(string s) : parent(s), mo1(s + " 1"), mo2(s + " 2")

~child()

};int main()

5.1、

子類物件在建立時需要

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

5.2、

先執行父類

建構函式然後

執行成員

建構函式

5.3、

父類建構函式顯式呼叫需要在初始化列表中進行(類中的const成員只能在初始化列表中使用)

5.4、

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

5.5、

析構順序與構造順序

對稱相反

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

本文內容來自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 子類物件的構造 子類中可以定義建構函式 子類建構函式 必須對繼承而來的成員進行初始化 直接通過初始化列表 或者 賦值的方式 進行初始 呼叫父類建構函式 進行初始化 父類建構函式在子類中的呼叫方式 預設呼叫 適用於無參建構函式 和 使...

46 繼承中的構造與析構

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

繼承中的構造與析構

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