将覆盖关键字和最终关键字与相同的成员函数一起使用是否有用



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

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!
};

最新更新