解决继承的抽象功能,问题是东西有点不同,对不起C++实现通过继承功能
我想实现的类组成工作在接口这样的工具:
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; }
};
无法重现。在将缺少的';'添加到类定义并使成员函数'public','TopClass t; t.work();'使用'-Wall -Wextra -pedantic -ansi'(和'-std = C++ 11')编译gcc 4.9.2和clang 3.5.0。 – Wintermute
对不起,它是由代码组成的。我添加了直接从项目中提取的代码。 – user2828383