簡體   English   中英

來自多重繼承的多重繼承

[英]Multiple inheritance from multiple inheritance

#include<iostream>
using namespace std;

class base1{
public:
    int x;
};
class base2{
public:
    int x;
};

class derived1: public base1, public base2{
    // Contains...  base1::x, base2::x
};
class derived2: public base1, public base2{
    // Contains...  base1::x, base2::x 
};

class derived: public derived1, public derived2{

};

如果我是對的, derived的類將包含四個整數。 但是我無法使用
derived1::base1::x, derived1::base2::x, derived2::base1::x, derived2::base2::x


它顯示了歧義錯誤。 ('base1' is ambiguous base of 'derived')
我想念什么嗎? 我該如何解決?

好吧,當您使用范圍解析運算符消除成員之間的歧義時,您無需為成員指定“路徑”。 相反,您可以間接命名成員所屬的基類。

由於將類名注入到該類的范圍內,並且因此,將其注入到任何派生自該類的類的范圍內,因此您base1冗長的方式命名了base1base2 即,以下所有條件對於成員訪問都是等效的:

derived d;
d.base1::x;
d.derived1::base1::x;
d.derived1::derived1::base1::base1::x;

這就是產生歧義的原因。 要做到這一點,是將對象轉換derived1&derived2& ,然后通過使用成員訪問base1::xbase2::x上。

static_cast<derived1&>(d).base1::x;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM