如果我从A和C获得B,从b类似这样:关键字“虚拟”是否传递给中间基类?
A
|
B
|
C
很可能我会在A.一个或多个虚拟功能现在,无意中我忘了把关键字virtual
B中的函数声明。但让我吃惊它的工作原理是,如果虚拟也设置B.这是代码:
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
virtual void foo(){cout << "A\n";};
};
class B : public A
{
public:
void foo(){cout << "B\n";} // a "virtual doesn't change the behaviour...
};
class C : public B
{
public:
void foo(){cout << "C\n";}
};
int main()
{
C c;
c.foo();
A *pa = new C;
pa->foo();
B *pb = new C;
pb->foo();
return 0;
}
如果还省略了virtual
在A
,输出
C
A
B
否则是
C
C
C
即使没有virtual
在B
!
所以:是关键字以某种方式pinherited?或者我在这里理解错误吗?
当然,你有一本参考书? –
也许现在太早了,但我没有找到答案... – steffen