多重繼承轉換二義性

2021-09-30 05:42:40 字數 469 閱讀 9378

如果乙個類繼承多個基類,而且這些基礎繼承相同的基類,則進行型別轉換時,如果轉換成相同的父型別,編譯時會產生二義性錯誤:

class a

;} ;

class b : public a {} ;

class c : public a {} ;

class d: public b, public c {} ;

d *pa = new d() ;

a *pb = (a*)(pa) ;

error c2594: 'type cast' : ambiguous conversions from 'd *' to 'a *'

即不支援將d*指標型別強制轉換成a*型別,需要選擇乙個更為精確的型別進行轉換,如

a *pb = (b*)(pa) ;

或a *pb = (c*)(pa) ;

兩種轉換都合法,但一般使用最左邊的基類,大多數編譯器產生的**效率會高一些。

多重繼承中二義性的消除

類a派生b和c,類d從b,c派生,如何將乙個類a的指標指向乙個類d的例項?解析 這道題實際上考查的是如何消除多重繼承引起的向上繼承二義性問題。程式 如下所示 class a class b public a class c public a class d public b,public c int...

C 繼承 二義性 虛繼承

繼承 子類擁有父類所有的成員變數和函式 子類是一種特殊的父類 子類可以當做父類的物件使用 子類可以擁有父類沒有的方法和屬性。class parent class child public parent int main 繼承的訪問控制 c 中的繼承方式會影響子類對外訪問屬性 1 看呼叫語句,是在類的...

python多繼承二義性

假如在多繼承中,父類a和父類b中有乙個同名的方法,子類呼叫的時候,呼叫哪個呢?class base object def test self print base class a base def test self print a class b base def test self print ...