虛擬繼承:
顧名思義就是繼承了但不給開闢空間;
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...