如果我像这样从 A 和 C 从 B 导出 B:
A
|
B
|
C
很可能我会在 A 中拥有一个或多个虚函数。现在,我不小心忘记将关键字virtual
放在 B 的函数声明中。但令我惊讶的是,它就像在 B 中设置了 virtual 一样工作。这是代码:
#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
in A
,则输出为
C
A
B
否则就是
C
C
C
即使没有virtual
in B
!
那么:关键字是否以某种方式被继承?还是我在这里理解错误?