C++中的final关键字有什么作用?(防止继承和重写)


final关键字用于编译期约束:类后加final禁止继承,虚函数后加final禁止重写,可与override联用确保重写正确性并锁定行为。

final 关键字在 C++ 中用来明确禁止某些类或成员函数被继承或重写,是一种编译期约束机制。

用在类定义后:禁止继承

在类名后加 final,表示该类不能作为基类被其他类继承。一旦尝试继承,编译器会报错。

  • 写法:class Base final { ... };
  • 错误示例:class Derived : public Base { ... }; → 编译失败
  • 适合用于工具类、包装类或设计上明确不希望被扩展的类(如 std::string_view 在部分实现中就用 final 语义)

用在虚函数声明后:禁止重写

在虚函数声明末尾加 final,表示该函数在当前类中是最终版本,派生类不能再覆盖它。

  • 写法:virtual void func() final;
  • 注意:只能用于虚函数(包括纯虚函数),非虚函数加 final 无意义,编译报错
  • 常见于想保留多态接口但锁定具体行为的场景,比如基类已提供最优实现,不希望子类改出 bug

和 override 的配合使用更安全

finaloverride 可以一起出现,既表明“这是对基类虚函数的重写”,又强调“到此为止,不可再改”。

  • 例如:void draw() override final;
  • 这样既防止拼写错误(没 override 会报错),也防止后续误加子类破坏设计意图

基本上就这些。final 不改变运行时行为,只在编译阶段起作用,但它让设计意图更清晰,也能帮编译器做优化(比如 devirtualization)。


# 工具  # c++  # 多态  # 成员函数  # 子类  # void  # 继承  # 虚函数  # 纯虚函数  # 接口  # class  # public  # bug  # 重写  # 报错  # 后加  # 用在  # 这是  # 是一种  # 也能  # 只在  # 到此为止 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎样安装企业微信_Win11安装企业微信教程【步骤】  如何在 Go 同包不同文件中正确引用结构体  PythonFastAPI项目实战教程_API接口与异步处理实践  c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】  MAC如何修改默认应用程序_MAC文件后缀关联设置与打开方式更改【教程】  Win10怎么设置开机密码_Windows10账户登录密码设置与取消  如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】  php和redis连接超时怎么办_phpredis调试连接问题汇总【指南】  Golang如何避免指针逃逸_Golang逃逸分析与堆栈优化策略  Mac如何整理桌面文件_Mac使用堆栈功能一键整理  c++怎么使用std::tuple存储多元组数据_c++ 11获取元素与解包操作【技巧】  c++中如何进行二进制文件读写_c++ read与write函数用法  LINUX如何删除用户和用户组_Linux userdel和groupdel命令用法【系统管理】  PHP主流架构怎么部署到Docker_容器化流程【操作】  Win11屏幕亮度突然变暗怎么解决_自动变暗问题处理  如何在 Laravel 中通过嵌套关联关系进行 orderBy 排序  Windows10系统怎么查看设备管理器_Win10快捷键Win+X菜单使用  Win10电脑C盘红了怎么清理_Windows10系统盘深度瘦身指南  Windows如何查看和管理已安装的字体?(字体文件夹)  PHP中require语句后直接调用返回对象方法的语法解析  mac怎么看硬盘大小_MAC查看磁盘存储空间与文件占用【详解】  Mac版Final Cut Pro入门_Mac视频剪辑基础操作【教程】  如何在Golang中定义接口_抽象方法和多态实现  MAC怎么设置程序窗口永远最前_MAC窗口置顶插件安装与快捷设置【方法】  Win11色盲模式怎么开_Win11屏幕颜色滤镜设置【关怀】  c# 在高并发场景下,委托和接口调用的性能对比  Win11如何添加/删除输入法 Win11切换中英文输入法快捷键【设置】  Win11怎么关闭系统提示音_Windows11声音方案设为无声教程  Python与GPU加速技术_CUDA与Numba高性能计算实践  Windows10如何更改日期格式_Win10区域设置短日期修改  Win11触摸板没反应怎么办_开启Win11笔记本触摸板手势教程【步骤】  Windows如何拦截2345弹窗广告_Windows拦截2345弹窗方法【步骤】  Win11怎么关闭OneDrive同步_Win11取消自动备份文件【教程】  网站体验不好=浪费钱:如何提升-用户体验效果差  Win10如何优化内存使用_Win10内存优化技巧【攻略】  如何在 ACF 中正确更新嵌套多层的 Group 字段子字段  Python变量绑定机制_引用模型解析【教程】  如何使用Golang操作指针变量_Golang解引用与赋值实践  Win11如何设置计划任务 Win11定时执行程序教程【详解】  Mac如何彻底清理浏览器缓存?(Safari与Chrome)  Win11输入法选字框不见了怎么办_Win11输入法修复与重置【教程】  Win11怎么开启远程桌面_Win11系统远程桌面启用开关  Python装饰器设计思路_功能增强机制说明【指导】  微信JSAPI支付回调PHP怎么接收_处理JSAPI异步通知数据方法【指南】  c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】  windows如何修改文件默认打开方式_windows设置程序关联教程  Python网页解析流程_html结构说明【指导】  Linux如何安装Tomcat应用服务器_Linux环境部署与端口修改【教程】  如何使用Golang安装依赖库_管理模块和第三方包  如何在 Go 中可靠地测试含 time.Time 字段的结构体 

 2025-12-14

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.