C++通过继承函数实现继承的抽象函数
C++ implementing inherited abstract functions via inherited functions
已解决,问题有点不同,抱歉
我正在尝试实现通过如下接口工作的类组合工具:
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
。因此,该层次结构中的每个类都被认为是抽象的。
对不起,伙计们,我现在知道问题出在哪里了。
正如您在上面看到的,我的一个接口的实现缺少作为祖先的原始接口,因此函数实际上并没有像它们应该的那样被覆盖。由于这些发布的类之间有许多级别,错误在代码中丢失了,编译器指向定义中的错误位置。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- C++继承:构造函数中的字符串构造
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 抽象类析构函数与继承"Shutdown"函数
- 继承构造函数和其他变量的解决方法
- 带有此指针的模板类多重继承构造函数不起作用?
- 为什么继承的函数会更改基类中的成员变量,而不是与名为它的对象同名的对象
- 继承 =delete 函数
- 虚拟继承构造函数的组装
- C++继承构造函数的可见性
- 结构不继承虚函数
- 使用空基类强制继承抽象工厂的做法是不好的吗?
- 为什么继承的函数忽略了在原始函数中调用的重写函数?
- 如何使用继承(抽象基类)实现移动构造函数和移动赋值运算符
- 使用继承的函数而不是基函数(不是抽象函数)
- C++通过继承函数实现继承的抽象函数
- C++ 继承抽象函数
- c++继承与抽象函数实现
- 抽象模板类和继承构造函数