關於派生類建構函式與基類建構函式的呼叫順序問題

2021-06-09 05:13:47 字數 1258 閱讀 4809

下面是實驗論證:

// 程式7.3.1

// 程式:sequence.cpp

// 功能:演示繼承關係中基類與派生類的建構函式與析構函式的呼叫次序。

#include

class base

// 析構函式

~base()

}; class derived: public base

// 析構函式

~derived()

}; derived obj; // 宣告乙個派生類的物件

int main()

上面derived obj;這一語句對應的彙編**是:

35:      derived obj;                // 宣告乙個派生類的物件

00401080  push        ebp

00401081  mov        ebp,esp

00401083  sub        esp,40h

00401086  push        ebx

00401087  push        esi

00401088  push        edi

00401089  lea        edi,[ebp-40h]

0040108c  mov        ecx,10h

00401091  mov        eax,0cccccccch

00401096  rep stos    dword ptr [edi]

00401098  mov        ecx,offset obj (00428ab8)

0040109d  call        @ilt+15(derived::derived) (00401014)

004010a2  pop        edi

004010a3  pop        esi

004010a4  pop        ebx

004010a5  add        esp,40h

004010a8  cmp        ebp,esp

004010aa  call        __chkesp (00403570)

004010af  mov        esp,ebp

004010b1  pop        ebp

004010b2  ret

請注意加粗的那一行,一切就清楚了。

基類與派生類的建構函式

一 預設建構函式的呼叫關係 通過下面的例子,我們來看一下基類與派生的建構函式的呼叫順序。建立時先基類後派生類。銷毀時先派生類後基類。include include using namespace std class cbase cbase class cderive public cbase cde...

關於派生類建構函式與基類建構函式的呼叫順序問題

程式7.3.1 程式 sequence.cpp 功能 演示繼承關係中基類與派生類的建構函式與析構函式的呼叫次序。include class base 析構函式 base class derived public base 析構函式 derived derived obj 宣告乙個派生類的物件 int...

派生類建構函式

1 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。像任何類一樣,如果類不定義自己的預設建構函式和複製控制成員,就將使用合成版本。2 派生類的合成預設建構函式除了初始化派生類的資料成員之外,它還初始化派生類物件的基類部分。基類部分由基類的預設建構函式初始化。3 派生類建構函式...