February 8th, 2014
Virtual Base Class
多重繼承如下圖的時候
如果要使用
D *dptr = new D();
D->L::para1
會有compiler error :: Ambiguous conversion
因為實際的的compiler 會把 B1與B2 個編譯出一個L 為實體(class table)
所以要取用D 中的 L會有兩個目標出現
==> 解法: 使用virtual base class 在 B1 與 B2
class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class B2 : virtual public L { /* ... */ };
class D : public B1, public B2 { /* … */ }; // valid
Ambiguous Base Class:
一樣的Case但是在 B1 與 B2裡面都有命名 變數 nB
若是要使用
D *dptr = new D();
D->nB
則會出現 compiler error
==>解法: 必須將要使用的 nB 定義清楚, 比如說 D->B1::nB 或是 D->B2::nB
詳細程式如下:
參考資料: