乙個有關C 中物件構造 析構和虛函式的問題

2021-06-10 05:30:47 字數 668 閱讀 6870

問題:執行如下c++**,程式的輸出是什麼?

#include using namespace std;

class base

~base()

virtual void foo()

};class derived: public base

~derived()

void foo()};

int main()

分析:主函式的第一句建立了乙個derived類物件,按照c++的物件構造順序,在構造派生類物件時,先呼叫基類的建構函式,再呼叫派生類的建構函式。基類構造函式呼叫了基類的foo()函式,派生類的構造函式呼叫了派生類的foo()函式。由於base()類的析構函式沒有定義為虛函式,主函式的第二句只呼叫base類的析構函式,這樣就發生了記憶體洩露。

以上**的執行結果為:

如果將以上**主函式的第一行改為derived *p = new derived;或者將base類的析構函式加上virtual關鍵字,則**的執行結果為:

c 有關建構函式和析構函式中呼叫虛函式問題

今天看了一道迅雷的筆試題目,然後引起一段思考,題目如下 下列關於虛函式的說法正確的是 a 在建構函式中呼叫類自己的虛函式,虛函式的動態繫結機制還會生效。b 在析構函式中呼叫類自己的虛函式,虛函式的動態繫結機制還會生效。c 靜態函式不可以是虛函式 d 虛函式可以宣告為inline 此題答案給的是bcd...

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...

C 全域性物件構造和析構

注 此為小白引導教程 引入 c 中的全域性物件什麼時候執行建構函式?什麼時候執行析構函式?與區域性物件又有什麼區別?正文 思路是這樣的,我們先寫乙個類,乙個有點簡單 又不簡單 的類 include include using std string using std cout using std e...