final 虚拟函数
C++ 11 引入了 final 说明符,如果出现在方法签名中,它禁止方法重写:
class Base {
public:
    virtual void foo() {
        std::cout << "Base::Foo\n";
    }
};
class Derived1 : public Base {
public:
    // Overriding Base::foo
    void foo() final {
        std::cout << "Derived1::Foo\n";
    }
};
class Derived2 : public Derived1 {
public:
    // Compilation error: cannot override final method
    virtual void foo() {
        std::cout << "Derived2::Foo\n";
    }
};
说明符 final 只能与虚拟成员函数一起使用,不能应用于非虚拟成员函数
与 final 一样,还有一个说明符调用者’覆盖’,它可以防止派生类中的 virtual 函数被覆盖。
说明符 override 和 final 可以组合在一起以产生预期效果:
class Derived1 : public Base {
public:
    void foo() final override {
        std::cout << "Derived1::Foo\n";
    }
};