override和final

override和final
枫override和final
override和final是 C++11 给面向对象代码补上的两个很实用的标记。它们的价值不在运行时功能,而在于让编译器帮你提前发现继承体系里的错误。
1. override 是干什么的?
override 用来明确表示:这个虚函数是用来重写基类函数的。
1 | class Base |
如果函数签名写错了,编译器会直接报错。
2. 为什么 override 常用?
没有 override 时,很容易写出“以为重写了,实际上没重写”的代码:
1 | class Base |
这种问题很隐蔽,而 override 能让编译器立刻指出来。
3. final 是干什么的?
final 的意思是“到此为止,不允许再继续继承或重写”。
3.1 修饰类
1 | class Base final |
这样这个类就不能再被继承。
3.2 修饰虚函数
1 | class Base |
这样派生类就不能继续重写 run()。
4. 一个完整示例
1 |
|
5. 使用建议
5.1 override 基本值得默认加
只要你明确是在重写父类虚函数,通常都建议加上 override。
5.2 final 要有明确设计意图
final 不是越多越好,它更适合那些你明确不希望继续扩展的类或接口。
总结
override 和 final 都是很小但非常实用的语言增强。
前者帮助你避免虚函数重写错误,后者帮助你明确继承边界。对于现代 C++ 的面向对象代码来说,override 尤其值得养成习惯。














