虛基類與虛擬繼承

2021-07-11 04:31:39 字數 830 閱讀 3638

虛擬繼承:

顧名思義就是繼承了但不給開闢空間;

class b0     //此段**中b0就是虛基類

public:

int m;

};class b1 : virtual

public b0 //b1虛擬繼承b0

public:

int n;

};class b2 : virtual

public b0 //b2虛擬繼承b0

public:

int n;

}; class d : public b1, public b2

public:

int x;

};int main()

通過虛擬繼承,b1,b2,b0共享一塊m空間,b1,b2不為m開闢空間,只是虛擬的繼承;

注意:

在派生類物件的建立過程中,構造順序是:按虛基類的宣告順序先構造虛基類,再按非虛基類的宣告順序構造非虛基類,再按定義順序構造成員物件的建構函式,最後構造派生類物件

class b0

~b0(){}

};class b1

~b1(){}

};class b2

~b2(){}

};class d : public b0, virtual

public b1, public b2

~d(){}

private:

b0 b0;

b1 b1;

b2 b2;

};int main()

虛擬繼承,虛基類

文章出處 http blog.csdn.net skylor archive 2009 03 26 4025698.aspx 虛擬繼承與虛基類實際上是說了同一件事,只是不同的書表達不同,在這裡還是推薦虛擬繼承這種說法 因為總有人問虛基類是什麼,這裡可以解釋為虛基類就是虛擬繼承,一種繼承的方式,有的書...

虛基類 虛擬繼承 虛函式?

前幾天師兄想考我什麼是虛基類的時候,我說是因為多重繼承中,如果出現菱形繼承 multiple inheritance diamond 不想要末端派生類有兩份最底層基類的資料的話,就得用虛擬繼承。結果居然被懟了,說我說的啥玩意兒?我還以為我記錯了,實際上是他把虛基類和含有虛函式的基類給混淆了。今天讀了...

C 虛基類 虛擬繼承

虛基類建構函式的引數必須由最新派生出的類負責初始化,即使不是直接繼承,示例程式的虛基類的建構函式只執行一次 include include include using namespace std class base class base1 virtual public base class bas...