首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的类接口继承

C++中的类接口继承
EN

Stack Overflow用户
提问于 2011-01-08 14:51:57
回答 1查看 419关注 0票数 6

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

这个想法基本上是为了

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

2)允许BBase向上转换为ABase,以便能够在相同的时间内处理这两种情况(例如,将这两种类型的实例保存在一个列表中)。

3)在ABase和BBase中实现一定的通用功能。

现在,在C++中表示这个问题的最好方法是什么?尽管它确实支持多重继承,但据我所知,这样的多层次继承是不可能的。问题是B继承了A和BBase,而后者又继承了ABase。只要在C++中翻译这1:1 (以下代码),C++编译器就会抱怨在B中没有实现ABase::foo()。

代码语言:javascript
运行
复制
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++兼容?

编辑:图中的反向箭头,并将“向下浇注”更正为“向上浇注”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-08 14:56:36

您可以通过使用C++直接在virtual inheritance中使用这种层次结构。

代码语言:javascript
运行
复制
class ABase{...};
class BBase : public virtual ABase {...};
class A     : public virtual ABase {...};
class B     : public A, public BBase {...};

当然,如果您计划拥有更多的级别,那么对B也使用虚拟继承可能是个好主意,因此您可以

代码语言:javascript
运行
复制
class B     : public virtual A, public virtual BBase {...};
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4634415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档