gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:30:38 24 4
gpt4 key购买 nike

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

我正在尝试实现通过这样的接口(interface)工作的类组合工具:

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 声称是抽象的。正如我所见,工具是抽象的,因为接口(interface),抽象函数得到继承,这很好。在 TopClass 中定义的函数现在可以覆盖这些抽象函数并使 TopClass 可实例化(如果我尝试就可以),为什么当我没有定义这些覆盖函数而是继承它们时这不会发生?

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

仅作记录:(几乎无关紧要)TopClass 有多个工具并且接口(interface)很复杂,这就是虚拟继承的原因。我需要使用相同的 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。因此,该层次结构中的每个类都被认为是抽象的。

关于C++通过继承函数实现继承的抽象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27650769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com