【发布时间】:2011-09-30 16:58:12
【问题描述】:
关于虚拟基类继承的一些事情让我感到困惑......鉴于以下类:
class A
{
virtual void foo() = 0;
}
class B : virtual A
{
void foo() { /* do X */ }
}
class C : virtual A
{
void foo() { /* do Y */ }
}
class D : B, C
{
}
这会编译吗?如果是这样,以下代码的结果是什么:
D d;
A* a = &d;
a->foo();
【问题讨论】:
-
我其实也很好奇这个的输出...会调用 B 的 foo,还是会调用 C 的 foo?
-
我猜你会收到关于模棱两可的函数调用的错误。
-
试试吧!由于歧义,您应该会收到编译器错误。
-
提供除 StackOverflow 之外的其他在线 C++ 编译器 ;-) comeaucomputing.com/tryitout、codepad.org、stackoverflow.com/questions/3916000/…。
标签: c++ methods virtual multiple-inheritance