【发布时间】:2021-06-23 16:48:45
【问题描述】:
我有这个结构:
class IA
{
virtual void foo() = 0;
};
class IB
{
virtual IA bar() = 0;
};
到目前为止,我制作了这两个接口的继承版本,但我在如何具体覆盖 IA IB::bar() 方法时遇到困难?
我的意思是如果我有一个类A 继承自IA 那么如何在继承IB 的类B 中声明A bar() 方法?或者我应该为这件事上三等功?
谢谢! ????
编辑:现在我注意到IB 中的bar() 定义如下:
virtual IA& bar() = 0;
也许这会有所帮助?
【问题讨论】:
-
virtual IA bar()无法实现,因为您无法创建IA的实例。您是否打算让它返回一个指向IA的指针或引用,该指针或引用指向从IA派生的类的对象? -
@MilesBudnek 不幸的是我无法触及这个结构。我只需要继承它。
-
@winsett 正如 Miles 所说,
IA IB::bar()无法实现。IB::bar()必须返回IA*指针或IA&引用。即使IA不是抽象的,在没有指针/引用的情况下按值返回IA仍然不起作用,因为bar()将slice 它试图返回的任何派生对象。 -
@RemyLebeau 是的,你是对的 - 我再次查看它,它的返回类型是
IA&。乍一看,我错过了这一点,这让我感到困惑。
标签: c++ inheritance multiple-inheritance