使用具有相同成员函数的override和final关键字是否有用?

Ayu*_*sia 2 c++ virtual-functions

将成员函数声明为覆盖和最终是否有用?为什么或者为什么不?

Ste*_*ppo 6

override确保该函数是虚函数并覆盖超类定义(否则,生成编译时错误),同时final表示子类不能进一步覆盖它.所以是的,当你重写超类函数并且你不希望子类再次覆盖它时,它是完全合理的.

例如,考虑以下层次结构:

class A {
public:
    virtual void foo() {}
};

class B: public A {
public:
    void foo() override final {} // <-- Overrides A::foo
};

class C: public B {
public:
    //void foo() override {} <-- Error here!
};
Run Code Online (Sandbox Code Playgroud)