多类继承设置问题
multi class inheritance setup issues
我有3个像这样的接口(纯虚拟)类
class A {
virtual void M1() = 0;
virtual void M2() = 0;
};
class B : public A {
virtual void M3() = 0;
};
class C : public A {
virtual void M4() = 0;
};
我有这样的实现
class Aimpl : A {
void M1 () override {};
void M2 () override {};
}
class Bimpl: public Aimpl, public B{
void M3() override {};
}
class Cimpl: public Aimpl, public C{
void M4() override {};
}
和
Bimpl b = Bimpl();
b.M2() // Error. M2 is ambigous. Can be from Aimpl or A
有什么简单的方法来解决这个问题?我希望能够在函数中传递B或C,而不是Bimpl
实质上,您在Bimpl
中有两个不同的M2
方法:Aimpl::M2
和B::M2
。您遇到了菱形继承问题。
要解决这个问题,应该使用虚拟继承。这个问题提供了一个很好的概述。实际上,您应该使用如下内容:
class A {
virtual void M1() = 0;
virtual void M2() = 0;
};
class B : public virtual A {
virtual void M3() = 0;
};
class C : public virtual A {
virtual void M4() = 0;
};
class Aimpl : public virtual A {
void M1 () override {};
void M2 () override {};
};
class Bimpl: public virtual Aimpl, public virtual B {
void M3() override {};
};
class Cimpl: public virtual Aimpl, public virtual C {
void M4() override {};
};
请注意,我不是非常非常熟悉虚拟继承,所以这可能是也可能不是应用虚拟继承的最佳方式。
相关文章:
- 将十六进制值设置为用于填充的字符变量时出现问题
- std::p 设置或多组的修订问题
- 在Visual "Microsoft studio 2019"上设置OpenCV 4.1.1时遇到问题?(非法指令。
- 嵌套的类成员变量不可访问.链表设置.V、下一个和新的问题
- C / C++链接问题与非常简单的设置
- 通过比较字符设置字符串时出现问题
- 在 c++ 中为我的类设置/获取方法时遇到问题
- 在设置 if-else 语句以删除特定货币并保持更新时遇到问题
- Coin-CLP设置的问题
- C 无序的设置问题与结构哈希
- 为 C++ 开发设置 GTK+ 时遇到问题
- 可视C++ 设置串行 COM 端口时出现问题
- 在将结构插入设置C++时遇到问题
- 使用设置精度在C++中舍入小数点时出现问题
- 未在另一个函数中设置变量引用的问题
- 设置Ncurses和C++时出现问题
- C awesomium设置了听众问题
- 为英特尔C++编辑器"GCC not found"设置环境变量时出现问题
- 问题:设置IP
- Eclipse c++ IDE,问题设置