我有以下情况,图为我们班的理论继承图:

这个想法基本上是为了
1)有两个可以在不同平台上实现的抽象基类(在我的例子中是两个不同的操作系统)
2)允许BBase向上转换为ABase,以便能够在相同的时间内处理这两种情况(例如,将这两种类型的实例保存在一个列表中)。
3)在ABase和BBase中实现一定的通用功能。
现在,在C++中表示这个问题的最好方法是什么?尽管它确实支持多重继承,但据我所知,这样的多层次继承是不可能的。问题是B继承了A和BBase,而后者又继承了ABase。只要在C++中翻译这1:1 (以下代码),C++编译器就会抱怨在B中没有实现ABase::foo()。
class ABase
{
public:
virtual void foo() = 0;
void someImplementedMethod() {}
};
class BBase : public ABase
{
public:
virtual void bar() = 0;
void someOtherImplementedMethod() {}
};
class A : public ABase
{
public:
A() {}
void foo() {}
};
class B : public A, public BBase
{
public:
B() : A() {}
void bar() {}
};
int main()
{
B b;
return 0;
}如何更改此继承模型以使其与C++兼容?
编辑:图中的反向箭头,并将“向下浇注”更正为“向上浇注”。
发布于 2011-01-08 14:56:36
您可以通过使用C++直接在virtual inheritance中使用这种层次结构。
class ABase{...};
class BBase : public virtual ABase {...};
class A : public virtual ABase {...};
class B : public A, public BBase {...};当然,如果您计划拥有更多的级别,那么对B也使用虚拟继承可能是个好主意,因此您可以
class B : public virtual A, public virtual BBase {...};https://stackoverflow.com/questions/4634415
复制相似问题