首页 > 解决方案 > 为什么要将 final 添加到 final 类的成员函数中?

问题描述

考虑以下代码:

#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 起可用——我们可以观察到以下内容:

因此,成员函数不可能f()被派生自 的类覆盖,因为这样的派生类由于应用于D类而不能存在。finalD

将声明为的类的成员函数final用作覆盖控制是否有任何意义?还是仅仅是多余的?virtualfinal

标签: c++c++11inheritancefinalvirtual-functions

解决方案


final派生类中的virtual函数final是多余的。

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


推荐阅读