在派生 class 中添加虚拟说明符

Adding virtual specifier in a derived class

考虑以下代码:

struct virtualfoo 
{
    virtualfoo{};
    virtual ~virtualfoo{};

    virtual double doStuff() = 0
};


struct realbar :  virtualfoo   
{
     realbar{};
     virtual ~realbar{};

     virtual double doStuff();
};

因为我想为 realbar 实现 doStuff(),虚拟不是强制性的。但如果我做对了,在 realbar::doStuff() 旁边添加虚拟说明符不会有什么坏处,对吗? using/not 使用虚拟会产生什么副作用?

您是否显式声明 realbar::doStuff 为虚拟并不重要,因为由于 virtualfoo:doStuff 是虚拟的,它隐含地 virtual。所以没有副作用; realbar::doStuff 无论如何都会是虚拟的。例如,赋予这个 online C++ draft standard:

10.3 Virtual functions

(2) If a virtual member function vf is declared in a class Base and in a class Derived, derived directly or indirectly from Base, a member function vf with the same name, parameter-type-list (8.3.5), cv-qualification, and ref- qualifier (or absence of same) as Base::vf is declared, then Derived::vf is also virtual (whether or not it is so declared) and it overrides Base::vf. ...

派生的 class 中不需要 virtual 关键字。但是它使代码更清晰。同样在 C++11 中引入了 override 关键字,它允许源代码明确指定成员函数 打算 覆盖基本 class 方法。

使用关键字 override 编译器将检查基 class(es) 以查看是否存在具有此确切签名的虚函数。如果没有,编译器会报错。