重写的虚函数应声明为 override 或 final
6.3.5 ID_missingExplicitOverride
将重写的虚函数都声明为 override 或 final 有利于提高可读性,并可确保虚函数被有效重写。
示例:
class A {
virtual int foo();
virtual int bar();
};
class B: public A {
int foo(); // Non-compliant
virtual int bar(); // Non-compliant
};
例中 B 重写 A 的 foo 和 bar 这两个虚函数,如果不看 A 的声明,则看不出 B::foo 是虚函数,也看不出 B::bar 是重写的虚函数。
改为如下方式会清晰很多:
class B: public A {
int foo() override; // Compliant
int bar() override; // Compliant
};
而且当重写的函数名、参数、返回类型与基类声明不符时,不能通过编译,可及时修正问题。
依据
ISO/IEC 14882:2011 10.3(4 5)
ISO/IEC 14882:2017 13.3(4 5)