当在一个类中声明一个方法为virtual
时,在派生类中覆盖该方法时,其被自动视为virtual
。在这种情况下,C++语言使得virtual
关键字变成可选的:
class Base {
virtual void f();
};
class Derived : public Base {
void f(); // 'virtual' is optional but implied.
};
我的问题是:为什么让virtual
成为可选的呢?我知道编译器不一定要被告知这个,但我认为如果编译器强制实施这种约束,开发人员会受益。
例如,有时候当我阅读别人的代码时,我会想知道一个方法是否是虚拟的,我必须跟踪它的超类来确定。而且一些编码标准(如Google)要求在所有子类中都必须加上
virtual
关键字。
NonVirtualBase
中删除= 0
会更好 :) - Matthieu M.