1、final
Specifies that a virtual function cannot be overridden in a derived class or that a class cannot be inherited from.——http://en.cppreference.com/
它可以指定一个虚函数不能被覆盖或者一个类不能被继承
struct Base
{
virtual void foo();
};
struct A : Base
{
virtual void foo() final; // A::foo is final
void bar() final; // Error: non-virtual function cannot be final
};
struct B final : A // struct B is final
{
void foo(); // Error: foo cannot be overridden as it's final in A
};
struct C : B // Error: B is final
{
};
2、override
Specifies that a virtual function overrides another virtual function.
——http://en.cppreference.com/
如果被指定的函数未覆盖基类中的虚函数,将报错
struct A
{
virtual void foo();
void bar();
};
struct B : A
{
void foo() const override; // Error: B::foo does not override A::foo
// (signature mismatch)
void foo() override; // OK: B::foo overrides A::foo
void bar() override; // Error: A::bar is not virtual
};
这两个说明符可能在一般的教材中很少提到,但非常有用,可以避免无意写错了参数导致出现难以发现的错误。