为什么要将final添加到final类的成员函数中?

时间:2019-06-19 19:33:17

标签: c++ c++11 inheritance final virtual-functions

考虑以下代码:

#include <iostream>

class B {
   virtual void f() {
      std::cout << "Base" << '\n';
   }
};

class D final: public Base {
   void f() final override {
      std::cout << "Derived" << '\n';
   }
};

注意上面的final上下文关键字的两种用法-自C ++ 11起可用-我们可以观察到以下内容:

  • final的成员函数D中添加f()可以防止f()D派生的类中被覆盖
  • final添加到类D可以防止其进一步派生

因此,成员函数f()不可能被D派生的类覆盖,因为由于final被应用于类D

使用final作为声明为virtual的类的final成员函数的覆盖控件是否有意义?还是仅仅是多余的?

1 个答案:

答案 0 :(得分:2)

在派生类final中的virtual函数上的

final是多余的。

就像在标记为virtual的方法上说override是多余的。 C ++有时就是这种方式。