基類構造函式呼叫虛函式的處理 之構造流程

2021-09-22 18:16:20 字數 681 閱讀 4295

當基類構造函式呼叫虛函式時,不會呼叫派生類的虛函式。

現有基類a和派生類b,兩個類中有虛成員函式 test()。程式剛進入b b時,在執行派生類b的建構函式時,需要首先呼叫基類a的建構函式。

那麼呼叫的是哪個建構函式呢?根據派生類建構函式原理:

這裡基類a有兩個建構函式a() :m() 和 a(int x) :m(x) ,派生類b中初始化建構函式中基類a時,使用的是 b() :a(2),所以呼叫基類a的建構函式 是a(int x) :m(x) 。

現在繼續分析:進入建構函式 a(int x) :m(x) 後,先初始化m,後進入函式體,執行test()。這裡執行的是類a中的test(),因為:當基類被構造時,物件還不是乙個派生類的物件。當類a建構函式執行完畢後,在返回類b建構函式體,執行test()。這裡執行的就是類b中的test()了。

#include

using namespace std;

class a          //建構函式

a(int x) :m(x)                //建構函式

virtual void test()

int m;

};class b :public a

virtual void test()

};int main()

虛基類的建構函式

虛基類的建構函式 include using namespace std class base class base1 virtual public base class base2 virtual public base class derived public base1,public base...

C 虛基類建構函式

c 虛基類建構函式 下面文章詳細介紹c 虛基,所謂c 虛基類 是由最派生類的建構函式通過呼叫虛基類的建構函式進行初始化的,但前提是要深入理解到底什麼是c 虛基類,及他是怎麼執行的。前面講過,為了初始化基類的子物件,派生類的建構函式要呼叫基類的建構函式。對於虛基類來講,由於派生類的物件中只有乙個虛基類...

c 虛基類之建構函式填空

虛基類之建構函式填空 試題描述 請仔細閱讀,補充下面 中的空白。c 類改錯b c 繼承改錯b c 典型運算子過載之集合類填空 c 虛基類之建構函式填空 c 類靜態成員之英雄類 c 純虛函式之再談星際爭霸 必要的標頭檔案等,可能為多條語句 基類a類 從虛基類a公有派生b類 從虛基類a公有派生c類 類d...