C++ C+中的类接口继承+;

C++ C+中的类接口继承+;,c++,inheritance,gcc,g++,abstract-class,C++,Inheritance,Gcc,G++,Abstract Class,我有以下情况,图中是我的类的理论继承图: 这个想法基本上是为了 1) 有两个可以在不同平台上实现的抽象基类(在我的例子中是两个不同的操作系统) 2) 允许BBase向上浇铸,以使其能够同时平等地处理这两种类型的实例(例如,在一个列表中保存这两种类型的实例) 3) 在ABase和BBase中实现某些通用功能 现在,用C++表示这个最好的方法是什么?尽管它确实支持多重继承,但据我所知,像这样的多级继承是不可能的。问题是B继承自A和BBase,而B和BBase又继承自ABase。在C++中简单地翻译

我有以下情况,图中是我的类的理论继承图:

这个想法基本上是为了

1) 有两个可以在不同平台上实现的抽象基类(在我的例子中是两个不同的操作系统)

2) 允许BBase向上浇铸,以使其能够同时平等地处理这两种类型的实例(例如,在一个列表中保存这两种类型的实例)

3) 在ABase和BBase中实现某些通用功能

<>现在,用C++表示这个最好的方法是什么?尽管它确实支持多重继承,但据我所知,像这样的多级继承是不可能的。问题是B继承自A和BBase,而B和BBase又继承自ABase。在C++中简单地翻译这一个1:1(下面的代码),C++编译器(GNU)会抱怨ABase::FoE()不在B.</P>中实现。
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++?

兼容?

<强> >:<强/>图中的倒置箭头,并修正“向下浇注”到“可浇注”。

< P>可直接使用C++中的层次结构: 当然,如果您计划有更多的级别,那么也可以对B使用虚拟继承,这样您就可以

class B     : public virtual A, public virtual BBase {...};

“从卑鄙到卑鄙”你是说卑鄙,对吧?是的,谢谢你的提示。图表中的箭头也是如此。对于
BBase
使用
virtual
也有不错的评价。像这样决定diamond中哪些类是接口是很好的,因此,
virtual
在逻辑上是正确的。哇,你的答案来得太快了!非常感谢,虚拟继承正是我所需要的!虽然
类A
严格来说是一个实现类,但它不需要是
虚拟的
基础。
class B     : public virtual A, public virtual BBase {...};