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

时间:2014-12-25 21:14:29

标签: c++ inheritance override abstract-class pure-virtual

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

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

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; }
};

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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