C++通过继承函数实现继承的抽象函数

C++ implementing inherited abstract functions via inherited functions

本文关键字:继承 抽象函数 实现 函数 C++      更新时间:2023-10-16

已解决,问题有点不同,抱歉

我正在尝试实现通过如下接口工作的类组合工具:

class Interface
{
    bool virtual use() = 0; 
}
class Tool : public virtual Interface
{
    void work() { use(); }
}
class InterfaceImplementation : public virtual Interface
{
    bool use() { return DoSomethingUseful(); }
}
class TopClass : public Tool, public InterfaceImplementation
{
    /* whatever using work() */
}

问题是TopClass声称是抽象的。在我看来,工具是抽象的,因为接口,抽象函数被继承,这很好。在 TopClass 中定义的函数现在可以覆盖这些抽象函数并使 TopClass 不可隐存(如果我尝试的话可以工作),为什么当我不定义这些覆盖函数,而只是继承它们时不会发生这种情况?

我试过了:玩弄继承的虚拟性和祖先的顺序(在 TopClass 的定义中)

仅供记录:(实际上无关紧要)TopClass 具有多种工具,界面很复杂,这就是虚拟继承的原因。我需要使用相同的 InterfaceImplementation(一个大类)来定义多个类似 TopClass 的类(每个类都有不同的工具),所以我无法如上所述定义 TopClass 中的抽象函数。简而言之,我的设计在完全:)时具有意义

编辑:上面的代码是编造的,这是一个无法编译的实际代码。它有点复杂,但问题是BuildRank在AIKBarnard中没有覆盖器。

struct KPlugExt
{
    bool virtual plug() = 0; 
};
struct KEvaluator : public virtual KPlugExt
{
    virtual int BuildRank(Card card) = 0;
};
struct KBarnardEvaluator : public virtual KPlugExt
{
    int virtual BuildRank(Card card);
};
struct KBarnardActions : public virtual KPlugExt, public virtual KEvaluator
{
    /* stuff */
};
class AIKBarnard : public KBarnardActions, public KBarnardEvaluator
{
public:
    bool plug() { return false; }
};

在您的实际代码中,没有类实现纯虚拟方法BuildRankTR 。因此,该层次结构中的每个类都被认为是抽象的。

对不起,伙计们,我现在知道问题出在哪里了。

正如您在上面看到的,我的一个接口的实现缺少作为祖先的原始接口,因此函数实际上并没有像它们应该的那样被覆盖。由于这些发布的类之间有许多级别,错误在代码中丢失了,编译器指向定义中的错误位置。