【发布时间】:2012-03-04 07:17:52
【问题描述】:
首先我很抱歉,如果有另一个帖子可以回答这个问题,我发现的所有类似帖子都涉及菱形继承方案或定义的函数,而这不是。
简而言之,我想知道是否可以让一个类从其他两个类继承,其中两个子类都有一个具有相同名称和参数的函数,但它是在一个子类中定义的,并且是纯虚拟的其他。此外,如果我能做到这一点,调用纯虚拟/抽象类上的函数最终会调用另一个子类上定义的函数,而对派生类的更改最少?
例子:
class A
{
public:
virtual void Set(int X) = 0;
};
class B
{
public:
virtual void Set(int X);
};
class AB : public A, public B
{
//other methods not relevant to example go here
};
int main(int argc, char **argv)
{
int Y = 5;
A* ObjectA = new AB();
ObjectA->Set(Y);
return 0;
}
到目前为止,我尝试编译这个基本示例时遇到了如下错误:
'AB' : 无法实例化抽象类 由于以下成员: 'void A::Set(int)' : 是抽象的
在进行自己的研究时,我找不到明确的答案,但根据其他涉及相关主题的问题,我发现在 AB 类中使用“使用 B::Set”可能会对此有所帮助。但是当我尝试将它添加到 AB 类定义中时,错误仍然存在。
我有什么办法可以完成这项工作吗?
【问题讨论】:
-
第四行缺少
virtual。 -
您的代码至少缺少一个
virtual说明符。请修复。 -
现在我们知道为什么许多语言没有实现 MI,因为像你这样的人只需要做这样的事情。 :) :)
-
@TonyHopkinson:这个问题与 MI 无关。提问者只是对纯虚函数感到困惑。
-
修复了虚拟的东西。 >.>
标签: c++ multiple-inheritance virtual-functions pure-virtual