我如何将基 class 的实现用于接口 class 的纯虚方法?
How can I use the implementation of a base class for a pure virtual method of a interface class?
我有一个实现虚方法 f() 的 BASE class。我还有一个 INTERFACE class,它有一个纯虚方法 f()。然后我有一个 DERIVED class 继承了 BASE 和 INTERFACE。当我尝试实例化 DERIVED 时,出现编译器错误“无法实例化抽象 class”。
class BASE
{
public:
BASE() = default;
~BASE() = default;
virtual void f(){}
};
class INTERFACE
{
public:
virtual void f() = 0;
};
class DERIVED :
public INTERFACE, public BASE
{
public:
DERIVED() = default;
~DERIVED() = default;
};
BASE class 不知道 INTERFACE,它是库的一部分,我无法更改它。
我读了几个类似的问题,但我找不到关于如何解决这个问题的明确答案。我需要的是能够实例化 DERIVED 并能够在 DERIVED 中使用来自 BASE 的 f() 以及当我通过 INTERFACE 访问它时。
因为 INTERFACE
的 void f()
从未定义,BASE
不继承自 INTERFACE
,所以这不是对该函数的覆盖。
DERIVED
没有定义 void f()
,所以它也没有覆盖那个 INTERFACE
函数,所以那个函数没有主体。
如果您希望它使用 BASE::f
覆盖 INTERFACE::f()
,请从 INTERFACE
继承 BASE
或在您的 DERIVED
中添加覆盖因此:
void f() override {BASE::f();}
我有一个实现虚方法 f() 的 BASE class。我还有一个 INTERFACE class,它有一个纯虚方法 f()。然后我有一个 DERIVED class 继承了 BASE 和 INTERFACE。当我尝试实例化 DERIVED 时,出现编译器错误“无法实例化抽象 class”。
class BASE
{
public:
BASE() = default;
~BASE() = default;
virtual void f(){}
};
class INTERFACE
{
public:
virtual void f() = 0;
};
class DERIVED :
public INTERFACE, public BASE
{
public:
DERIVED() = default;
~DERIVED() = default;
};
BASE class 不知道 INTERFACE,它是库的一部分,我无法更改它。 我读了几个类似的问题,但我找不到关于如何解决这个问题的明确答案。我需要的是能够实例化 DERIVED 并能够在 DERIVED 中使用来自 BASE 的 f() 以及当我通过 INTERFACE 访问它时。
因为 INTERFACE
的 void f()
从未定义,BASE
不继承自 INTERFACE
,所以这不是对该函数的覆盖。
DERIVED
没有定义 void f()
,所以它也没有覆盖那个 INTERFACE
函数,所以那个函数没有主体。
如果您希望它使用 BASE::f
覆盖 INTERFACE::f()
,请从 INTERFACE
继承 BASE
或在您的 DERIVED
中添加覆盖因此:
void f() override {BASE::f();}