C 派生類構造函式呼叫順序(詳解)

2022-04-06 00:07:40 字數 1003 閱讀 4334

我們來看下面一段**:

class

b1

};class

b2

};class

b3

};class c: public b2, public b1, public

b3

private

: b1 memberb1;

b2 memberb2;

b3 memberb3;

};void

main( )

執行後的結果如下:

constructing b2 2

constructing b1 1

constructing b3 *

constructing b1 3

constructing b2 4

constructing b3 *

為什麼會有以上的結果?

眾所周知建構函式的執行次序如下:

呼叫基類建構函式,呼叫順序按照他們的繼承時宣告的順序。

呼叫內嵌成員物件的建構函式,呼叫順序按照他們在類中宣告的順序。

派生類的建構函式體中的內容。

析構函式的呼叫順序相反。

那麼再來看以上的例子就很容易理解了。b2、b1、b3是c的基類,按照上述的順序,我們先要構造基類,然後才是子物件,最後是其本身的建構函式所以先要執行這三個類的建構函式。在構造時按照他們在類中的順序,首先呼叫b2的建構函式

b2(int j)

~a()

};class

b ~b()

};class c:public

a,b ~c()

};void

main()

輸出結果:

c=b類a建構函式被呼叫

i=10

類b建構函式被呼叫

k=15

類c建構函式被呼叫

類c析構函式被呼叫

類b析構函式被呼叫

類a析構函式被呼叫

C 派生類物件構造順序

構造依如下順序 1.呼叫本類的基類的建構函式 1.1 按照基類成員定義順序對每個成員執行初始化 1.2 執行基類建構函式體 2.呼叫本類的建構函式 2.1 按照本類成員定義順序引用初始化列表對每個成員執行初始化 2.2 執行本類建構函式體 總結為一句 首先初始化本類的基類部分,然後按照宣告的順序依次...

C 派生類建構函式

派生類構造函式呼叫順序 1.基類的建構函式.2.子物件類的建構函式.3.派生類建構函式.當物件被刪除時,派生類的析構函式被執行,由於析構函式也不能被繼承,因此在執行派生類的析構函式時,基類的析構函式也會被呼叫。先執行派生類的析構函式,再執行子物件類的析構函式,再執行基類的建構函式。include u...

c ,派生類無法呼叫基類建構函式

include include using namespace std class undergraduate void showinfo private char id 10 char name 10 char major 10 class graduate public undergraduat...