来自多个继承的多元继承

Multiple inheritance from multiple inheritance

本文关键字:继承      更新时间:2023-10-16
#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')
我想念什么吗?我应该如何解决?

好吧,当您使用示波器分辨率操作员在成员之间进行歧义时,您不会向成员命名"路径"。相反,您可以间接地命名成员来自的基类。

由于类名将类名将其注入类的范围,因此,您只是以冗长的方式命名base1base2的任何类的范围。IE。以下所有内容对于成员访问都是等效的:

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

这就是歧义发生的原因。这样做的方法是 cast 将对象添加到derived1&derived2&中,然后通过base1::xbase2::x使用成员访问。

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