【发布时间】:2016-06-13 22:40:14
【问题描述】:
我有这个代码:
class A
{
public:
virtual void FA()=0;
};
class B: public A
{
public:
virtual void FB()=0;
};
class Imp_A: public A
{
public:
void FA()
{
// implement FA
}
};
class Imp_B :public Imp_A, public B
{
public:
void FB()
{
// implement FB by calling FA()
FA();
// do some more work here.
}
};
在 Imp_B 类中,我不想实现 FA,因为它已经在该类所基于的 Imp_A 中实现了。
但是当我尝试编译我的代码时,我得到了 Imp_B 是虚拟的并且不能被实例化的错误。
当我尝试在 FB 中调用 FA 时,我收到错误提示 FA 不明确。
我该如何解决这个问题?
请注意 Imp_A 是基于 A 并实现它,Imp_B 是基于 Imp_A 和 B 的想法是它使用 imp_A 的 A 实现并且只实现 B。
【问题讨论】:
-
你得到一个模棱两可的参考,因为它不知道是使用类
A还是imp_A。为了解决这个问题,你需要在它前面加上你想要实现它的基类,所以如果你想使用 A 类,那么你可以输入A::FA。您不能实例化虚拟方法,但可以覆盖它们,因此您需要指定您正在覆盖该方法。我有一段时间没有使用 C#,所以我不记得确切的语法(因此我要评论而不是回答)。 -
@Vistari 这是 c++ 而不是 c#。由于在 Imp_A 中实现了 FA,为什么我不能实例化 Imp_B?
-
@mtk99 这不是那个问题的重复,因为这里 imp_A 基于 A 并且在那个问题上实现与虚拟类无关。
-
你是对的,对不起
-
实际错误是调用
FA();不明确(无法在来自B的A::FA和来自Imp_A的A::FA之间做出决定)。 “Imp_B 是虚拟的,不能被实例化”是一个应该被忽略的级联(它发生是因为FA();编译失败意味着FB() { .... }没有编译,所以该类不被认为已经覆盖了纯虚拟定义)
标签: c++ multiple-inheritance virtual-functions