C 虛基類建構函式

2021-05-21 19:21:29 字數 939 閱讀 6674

c++虛基類建構函式

下面文章詳細介紹c++虛基,所謂c++虛基類:是由最派生類的建構函式通過呼叫虛基類的建構函式進行初始化的,但前提是要深入理解到底什麼是c++虛基類,及他是怎麼執行的。

前面講過,為了初始化基類的子物件,派生類的建構函式要呼叫基類的建構函式。對於虛基類來講,由於派生類的物件中只有乙個虛基類子物件。為保證虛基類子物件只被初始化一次,這個虛基類建構函式必須只被呼叫一次。

由於繼承結構的層次可能很深,規定將在建立物件時所指定的類稱為最派生類。c++規定,虛基類子物件是由最派生類的建構函式通過呼叫虛基類的建構函式進行初始化的。如果乙個派生類有乙個直接或間接的c++虛基類,那麼派生類的建構函式的成員初始列表中必須列出對虛基類建構函式的呼叫。如果未被列出,則表示使用該虛基類的預設建構函式來初始化派生類物件中的虛基類子物件。

從虛基類直接或間接繼承的派生類中的建構函式的成員初始化列表中都要列出這個虛基類建構函式的呼叫。但是,只有用於建立物件的那個最派生類的構造函式呼叫虛基類的建構函式。

而該派生類的基類中所列出的對這個虛基類的構造函式呼叫在執行中被忽略,這樣便保證了對虛基類的物件只初始化一次。c++又規定,在乙個成員初始化列表中出現對虛基類和非虛基類建構函式的呼叫,則c++虛基類的建構函式先於非虛基類的建構函式的執行。

下面舉一例子說明具有c++虛基類的派生類的建構函式的用法。

class a 

列印結果:

class a

class b

class c

class d

在派生類b和c中使用了c++虛基類,使得建立的d類物件只有乙個虛基類子物件。在派生類b,c,d的建構函式的成員初始化列表中都包含了對虛基類a的建構函式。在建立類d物件時。

只有c++虛基類d的建構函式的成員初始化列表中列出的虛基類建構函式被呼叫,並且僅呼叫一次,而類d基類的建構函式的成員初始化列表中列出的虛基類建構函式不被執行。這一點將從該程式的輸出結果可以看出。

虛基類的建構函式

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

c 虛基類之建構函式填空

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

C 虛基類建構函式的執行順序

1 呼叫基類的建構函式,多個基類則按派生類宣告時 列出的次序 從左到右呼叫,而不是初始化列表中 的次序。2 呼叫物件成員 子物件 的建構函式,按類宣告中 物件成員出現的次序呼叫,而不是初始化列表中的 次序。3 執行派生類的建構函式。同一層中對虛基類建構函式的呼叫總是先於普通基類的構 造函式。incl...