虛基類的建構函式

2021-08-31 23:43:10 字數 1403 閱讀 4544

虛基類的建構函式

#include using namespace std;

class base

};class base1: virtual public base

};class base2: virtual public base

};class derived: public base1, public base2

};int main ()

結果:

在上述程式中 , base 是乙個虛基類 , 它只有乙個帶引數的建構函式 , 因此要求在派生類 base1、 base2 和 derived 的建構函式的初始化表中 , 都必須帶有對 base 建構函式的呼叫。

如果 base 不是虛基類 , 在派 生類 derived 的 構造 函式的 初 始化 表中 呼叫 base 的構 造函式是錯誤的 ,

但是當 base 是虛基類且只有 帶引數 的構造函 數時 , 就必 須在類 derived 的建構函式的初始化表中調 用類 base 的 構造 函式。 因此 , 在 derived 構 造函 數 的初 始化 表中 , 不僅含有對 base1 和 base2 建構函式的調 用 , 還有對虛 基類 base 構造 函式 的呼叫。 上

述程式執行的結果為 :

不難看出 , 上述程式中虛基類 base 的構 造函式 只執行 了一次。 顯然 , 當 derived 的 構

造函式呼叫了虛基類 base 的構 造函 數之後 , 類 base1 和類 base2 對 base 構 造 函式 的調 用

被忽略了。 這也是初始化虛基類和初始化非虛基類不同的地方。

說明 :

(1 ) 關鍵字 virtual 與派生 方 式關 鍵字 ( public 或 private) 的先 後順 序無 關緊 要 , 它 只

說明是 「 虛擬派生」。 例如以下兩個虛擬派生的宣告是等價的。

class derived: virtual public base;

class derived: public virtual base;

(2 ) 乙個基類在作為某些派生類虛基類的同時 , 又作為另一些派生 類的非虛 基類 , 這

種情況是允許存在的 , 例如 :

class b;

class x∶virtual public b;

class y ∶virtual public b;

class z∶public b;

class aa ∶public x, public y , public z; 

C 虛基類建構函式

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

虛基類 虛函式和純虛基類

首先看乙個例子 class base class child1 public base class child2 public base void main else p print 函式呼叫的時候,檢視虛表,根據p的位址首先從虛表裡面查詢要呼叫的函式 這裡呼叫child2的print 函式 ret...

c 虛基類之建構函式填空

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