c++ - 多重继承来自多重继承

标签 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' 是 'derived' 的模糊基数)
我错过了什么吗?我该如何解决?

最佳答案

好吧,当您使用范围解析运算符来消除成员之间的歧义时,您不会为成员命名“路径”。您可以间接地命名成员来自的基类。

由于类名被注入(inject)到类的范围内,因此,注入(inject)到从它派生的任何类的范围内,您只需命名 base1base2 以冗长的方式。 IE。以下所有内容对于成员访问都是等效的:

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

这就是歧义发生的原因。方法是将对象castderived1&derived2&,然后通过base1::使用成员访问: xbase2::x

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

关于c++ - 多重继承来自多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581359/

相关文章:

C++可以setw和setfill填充字符串的末尾吗?

c# - 显示不同对象的数组c#(类继承)

c# - 自定义成员资格/角色/配置文件提供程序而不继承 MembershipProvider、RoleProvider 等?

C++虚继承初始化顺序

C++ STL 算法 upper_bound() 不是严格大于

c++ - 模板特化继承自特定子类

java - 返回子类型作为父类(super class)型 java

java - 有一种用Java模拟菱形继承(钻石问题)的方法

c++ - move 赋值运算符和虚拟继承

C++ 搜索文件名指向字符串 strcmp 错误的指针