多重继承的多重继承

时间:2018-03-30 20:58:15

标签: c++ inheritance 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')
我错过了什么吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

好吧,当您使用范围解析运算符来消除成员之间的歧义时,您不能命名一个&#34;路径&#34;对会员。您可以间接地命名成员来自的基类。

由于类名被注入到类的范围中,因此,在从它派生的任何类的范围内,您只是在详细命名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;