将成员函数声明为覆盖和最终有用吗?为什么或为什么不呢?
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!
};