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

2021-09-30 04:26:00 字數 1042 閱讀 3492

// 程式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 宣告乙個派生...

派生類建構函式

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