在函数声明中缺少'virtual'限定符

Rob*_*Rob 4 c++ virtual inheritance

在浏览一些旧代码时,我遇到了类似于以下内容的内容:

class Base
{
public:
    virtual int Func();
    ...
};

class Derived : public Base
{
public:
    int Func(); // Missing 'virtual' qualifier
    ...
};
Run Code Online (Sandbox Code Playgroud)

代码编译良好(MS VS2008)没有警告(级别4)并且它按预期工作 - Func即使虚拟限定符在派生类中缺失也是虚拟的.现在,除了造成一些混淆之外,这段代码是否有任何危险,或者我应该更改所有内容,添加virtual限定符?

Bla*_*rad 10

virtual会在派生类中延续到全部覆盖功能.添加关键字的唯一真正好处是表示您的意图,Derived类定义的随意观察者将立即知道它Func是虚拟的.

甚至扩展Derived的类也将具有虚拟Func方法.

参考:MSDN上的虚拟功能.向下滚动页面以查看

虚拟关键字可以声明在一个派生类中重写功能时,可以使用,但它是不必要的; 虚函数的覆盖总是虚拟的.