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

 

詳細程式如下:

參考資料:

      


Evan

Attitude is everything