虛基類建構函式的引數必須由最新派生出的類負責初始化,即使不是直接繼承,
示例程式的虛基類的建構函式只執行一次:
#include
#include
#include
using namespace std;
class base
};class base1 : virtual public base
};class base2 : virtual public base
class derived : public base1, public base2
};int main ()
在derived建構函式中,如果沒有base(x1)將報錯,因為derived的直接基類中有虛繼承base的,且base的建構函式是有引數的,可以形象的理解為「 derived繼承了base 」 ,所以需要在初始化列表中對父類初始化。
程式執行結果 :
constructing base , x = 1
constructing base1 , y = 2
constructing base2 , z = 3
constructing derived, xyz = 4
虛擬繼承,虛基類
文章出處 http blog.csdn.net skylor archive 2009 03 26 4025698.aspx 虛擬繼承與虛基類實際上是說了同一件事,只是不同的書表達不同,在這裡還是推薦虛擬繼承這種說法 因為總有人問虛基類是什麼,這裡可以解釋為虛基類就是虛擬繼承,一種繼承的方式,有的書...
虛基類 虛擬繼承 虛函式?
前幾天師兄想考我什麼是虛基類的時候,我說是因為多重繼承中,如果出現菱形繼承 multiple inheritance diamond 不想要末端派生類有兩份最底層基類的資料的話,就得用虛擬繼承。結果居然被懟了,說我說的啥玩意兒?我還以為我記錯了,實際上是他把虛基類和含有虛函式的基類給混淆了。今天讀了...
虛基類與虛擬繼承
虛擬繼承 顧名思義就是繼承了但不給開闢空間 class b0 此段 中b0就是虛基類 public int m class b1 virtual public b0 b1虛擬繼承b0 public int n class b2 virtual public b0 b2虛擬繼承b0 public in...