父類 建構函式 成員物件的呼叫時機

2021-06-21 05:14:42 字數 1428 閱讀 6522

在使用new建立物件時,主要完成四項工作:

1 構造父類成員物件

2 構造子類成員物件

3 呼叫父類建構函式

4 呼叫子類建構函式

這四項工作的時間順序是怎樣的呢?

原則是:先父類後子類,先成員後函式

一級繼承

例如:class x

};class a

};class b: public a

};int main()

構造物件b時,根據第1個原則:先父類後子類,先構造a(1),然後構造b(2)。

構造a(1):

然後根據第2個原則,先成員後函式,先構造a的成員x1,即先呼叫x建構函式,然後再呼叫a建構函式

構造b(2):

根據第2個原則,先成員後函式,先構造b的成員x2,即先呼叫x建構函式,然後再呼叫b建構函式

因此輸出為:

xaxb

多級繼承

在一級繼承中這個比較容易分析,在多級繼承中就會複雜些,但堅持這兩個原則,細心分析也不會出問題的。

#include

#include

#include

using namespace std;

class x

};class y

};class a

~a()

};class b: public a

~b()

};class c: public b

~c()

};int main()

這個程式的輸出就比較複雜:

ayaybxayaybaxc~c~a~b~a~a~b~a~a

開始分析:

先父類後子類,所以先構造b(1),然後構造c(2)

構造b(1)的過程如下:

也是先構造a(1.1),然後構造b(1.2)

構造a(1.1)的過程如下:

呼叫a的建構函式,輸出a(第乙個輸出字元)

構造b(1.2)的過程如下:

先成員(1.2.1)後構造(1.2.2),

成員(1.2.1)的過程如下:

b的成員有y,a,y,所以構造y,a,y,輸出yay(第二到四個字元)

構造(1.2.2)的過程如下:

b的建構函式,輸出b(第五個字元)

所以構造b一共會輸出yayb四個字元

構造c(2)的過程如下:

先成員(2.1)後構造(2.2)

成員(2.1)的過程如下:

c的成員有xbax

所以構造x,輸出x(第六個字元)

構造b輸出ayayb(第七到十乙個字元)

構造a輸出a(第十二個字元)

構造x輸出x(第十三個字元)

構造(2.2)

輸出c(第十四個字元)

最後按照完全相反的順序呼叫析構函式

父類 建構函式 成員物件的呼叫時機

在使用new建立物件時,主要完成四項工作 1 構造父類成員物件 2 構造子類成員物件 3 呼叫父類建構函式 4 呼叫子類建構函式 這四項工作的時間順序是怎樣的呢?原則是 先父類後子類,先成員後函式 一級繼承 例如 class x class a class b public a int main 構...

複製建構函式的呼叫時機

每日心得 獨上高樓,望盡天涯路 日期 12.14 學習內容 複製建構函式的呼叫時機 重點 1 用已知變數 去複製 新定義的變數 2 值傳遞的方式給函式引數傳值 3 以值的方式返回區域性物件 4 呼叫複製建構函式後,系統不提供預設建構函式 定義類的時候,需要構造和複製都有 include using ...

C 拷貝構造函式呼叫時機

class a 傳入乙個字串代表變數的名字 a string n name n a 拷貝建構函式a const a a 過載 運算子 a operator const a a friend ostream operator ostream os,const a a private string na...