【发布时间】:2021-04-07 13:00:13
【问题描述】:
很抱歉描述不佳。问题来了:
class PureVirtualBase {
public:
virtual ~PureVirtualBase() {}
virtual int IntFn() = 0;
};
class PureVirtualDerivedBase : public PureVirtualBase {
public:
virtual ~PureVirtualDerivedBase() {}
virtual int OtherIntFn() = 0;
};
class Foo : public PureVirtualBase {
public:
virtual int IntFn() { return intVal; }
protected:
int intVal;
};
class Bar : public Foo, public PureVirtualDerivedBase {
public
virtual int OtherIntFn() { return 123; }
};
由于“'Bar”而失败:由于以下成员而无法实例化抽象类:'int PureVirtualBase::IntFn(void) is abstract"
我不确定如何纠正这个问题。我会认为 Bar 很好,因为它继承了 Foo 的 IntFn 实现(并根据 PureVirtualDerivedBase 的要求添加了 OtherIntFn)。我尝试过将继承设为虚拟(public virtual Foo、public virtual PureVirtualBase),但没有成功。
有什么想法吗?提前致谢。
【问题讨论】:
-
从抽象类派生时,如果您不实现纯虚方法,您的类也会变成抽象类,因此您无法实例化该类型的对象。
标签: c++ multiple-inheritance pure-virtual virtual-inheritance