override 与 final 是 c++11中的 说明符(specifier)
override
参考页面:https://zh.cppreference.com/w/cpp/language/override
作用:指定一个虚函数覆盖另一个虚函数。
class A
{
virtual void foo();
void bar();
};
class B : A
{
void foo() const override; // 错误:B::foo 不覆盖 A::foo
// (签名不匹配)
void foo() override; // OK:B::foo 覆盖 A::foo
void bar() override; // 错误:A::bar 非虚
};
override作用是帮助检查是否继承了想要继承的虚函数。可以避免出现 “在继承的时候写错了函数(参数类型、参数个数不符),编译没问题但是程序运行时和预想的不一样” 的情况。
建议重写虚函数的时候加上 override。
final
参考页面:https://zh.cppreference.com/w/cpp/language/final
作用:指定某个虚函数不能在子类中被覆盖,或者某个类不能被子类继承。
class Base
{
virtual void foo();
};
class A : Base
{
void foo() final; // Base::foo 被覆盖而 A::foo 是最终覆盖函数
void bar() final; // 错误:非虚函数不能被覆盖或是 final
};
class B final : A // class B 为 final
{
void foo() override; // 错误:foo 不能被覆盖,因为它在 A 中是 final
};
class C : B // 错误:B 为 final
{
};