如果我像这样从 A 派生 B,从 B 派生 C:
A
|
B
|
C
我很可能在 A 中有一个或多个虚函数。现在,我不小心忘记在 B 的函数声明中放置关键字 virtual
。但令我惊讶的是,它就像在 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;
}
如果你在A
中也省略了virtual
,输出是
C
A
B
否则就是
C
C
C
即使 B
中没有 virtual
!
那么:关键字是否以某种方式继承?还是我理解错了?
最佳答案
如果一个方法在基类中是virtual
,那么它在其子类中也是virtual
,而无需这样声明它。
关于c++ - 关键字 "virtual"是否传递给中间基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090502/