我如何将基 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 访问它时。

因为 INTERFACEvoid f() 从未定义,BASE 不继承自 INTERFACE,所以这不是对该函数的覆盖。

DERIVED 没有定义 void f(),所以它也没有覆盖那个 INTERFACE 函数,所以那个函数没有主体。

如果您希望它使用 BASE::f 覆盖 INTERFACE::f(),请从 INTERFACE 继承 BASE 或在您的 DERIVED 中添加覆盖因此:

void f() override {BASE::f();}