c++ - 为什么要将 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 起可用——我们可以观察到以下内容:
- 添加
final
toD
的成员函数f()
可防止在派生自 的类中f()
被覆盖D
。 - 添加
final
到类D
可以防止它进一步派生。
因此,成员函数不可能f()
被派生自 的类覆盖,因为这样的派生类由于应用于D
类而不能存在。final
D
将声明为的类的成员函数final
用作覆盖控制是否有任何意义?还是仅仅是多余的?virtual
final
解决方案
final
派生类中的virtual
函数final
是多余的。
就像virtual
在标记的方法上说override
是多余的。C++ 有时就是这样。
推荐阅读
- spring-boot - 如何正确处理来自服务的异常(spring boot rest)
- maven - 从 maven cmdline 将 threadCount 传递给 surefire 插件
- google-apps-script - 在 Google 电子表格中解析 CSV
- apache-kafka - 在具有不同类型的 JSON 值主题上定义 KSQL STRUCT
- symfony - 输入和输出类的 Symfony 依赖注入
- scala - 使用 Spark xgboost4j 提前停止时如何获取 iter?
- java - FileProvider 无法解析 XML
- java - Apache lucene:对数字和德语变音符号进行排序
- sql - Laravel 将单独的记录合并为一个记录
- spring - 内存中的spring boot activemq