虛繼承:在繼承定義中包含了virtual關鍵字的繼承關係;
虛基類:在虛繼承體系中的通過virtual繼承而來的基類;
宣告虛基類的一般形式為
class 派生類名: virtual 繼承方式 基類名
需要注意: 為了保證虛基類在派生類中只繼承一次,應當在該基類的所有直接派生類中宣告為虛基類。否則仍然會出現對基類的多次繼承。
將類a宣告為虛基類,方法如下:
class a//宣告基類a
;class b :virtual public a//宣告類b是類a的公用派生類,a是b的虛基類
;class c :virtual public a//宣告類c是類a的公用派生類,a是c的虛基類;虛
繼承 demo 參考來自:
虛基類:
用於某類從多個類繼承,這多個基類有共同基類時,這個最上層基類的成員會多次在最終派生類出現而產生二義性,為避免二義性,使得最終派生類中,最上層的基類成員只有乙份,這時需要虛擬繼承,該最上層類就是虛基類,需要注意的是,該類在第一層派生時就要虛擬繼承才行,使用方法是在繼承方式前加上乙個 virtual就可以了
#include using namespace std;
class cbase
~cbase() };
class cderive1: virtual public cbase
~cderive1()
int geta() };
class cderive2: virtual public cbase
~cderive2()
int geta() };
class cderive12: public cderive1,public cderive2
~cderive12() };
void main()
效果: 虛基類 虛擬繼承 虛函式?
前幾天師兄想考我什麼是虛基類的時候,我說是因為多重繼承中,如果出現菱形繼承 multiple inheritance diamond 不想要末端派生類有兩份最底層基類的資料的話,就得用虛擬繼承。結果居然被懟了,說我說的啥玩意兒?我還以為我記錯了,實際上是他把虛基類和含有虛函式的基類給混淆了。今天讀了...
虛基類 虛函式和純虛基類
首先看乙個例子 class base class child1 public base class child2 public base void main else p print 函式呼叫的時候,檢視虛表,根據p的位址首先從虛表裡面查詢要呼叫的函式 這裡呼叫child2的print 函式 ret...
虛擬繼承,虛基類
文章出處 http blog.csdn.net skylor archive 2009 03 26 4025698.aspx 虛擬繼承與虛基類實際上是說了同一件事,只是不同的書表達不同,在這裡還是推薦虛擬繼承這種說法 因為總有人問虛基類是什麼,這裡可以解釋為虛基類就是虛擬繼承,一種繼承的方式,有的書...