在浏览一些旧代码时,我遇到了类似于以下内容的内容:
class Base { public: virtual int Func(); ... }; class Derived : public Base { public: int Func(); // Missing 'virtual' qualifier ... };
代码编译良好(MS VS2008)没有警告(级别4)并且它按预期工作 - Func
即使虚拟限定符在派生类中缺失也是虚拟的.现在,除了造成一些混淆之外,这段代码是否有任何危险,或者我应该更改所有内容,添加virtual
限定符?
该virtual
会在派生类中延续到全部覆盖功能.添加关键字的唯一真正好处是表示您的意图,Derived类定义的随意观察者将立即知道它Func
是虚拟的.
甚至扩展Derived的类也将具有虚拟Func方法.
参考:MSDN上的虚拟功能.向下滚动页面以查看
该虚拟关键字可以声明在一个派生类中重写功能时,可以使用,但它是不必要的; 虚函数的覆盖总是虚拟的.