0

0

c++中final关键字怎么用_c++禁止继承与重写【详解】

尼克

尼克

发布时间:2026-02-03 14:27:26

|

396人浏览过

|

来源于php中文网

原创

final用于类后禁止继承,用于虚函数后禁止重写;仅适用于类定义和虚函数声明,不可用于普通函数、变量或命名空间,且无传递性。

c++中final关键字怎么用_c++禁止继承与重写【详解】

final 用在类定义后禁止继承

在 C++11 及以后,final 是一个标识符(不是关键字,但有保留语义),加在类名后面能明确阻止其他类从它派生。一旦标记为 final,任何尝试继承它的行为都会触发编译错误

常见错误现象:error: cannot derive from 'final' base class 或类似提示,通常出现在子类声明时。

  • 写法必须紧贴类名后、花括号前:class Base final { ... };
  • 不能写成 class final Base { ... }; —— 这是语法错误
  • 模板类也能用:template class Container final { ... };
  • 注意:final 不影响友元、成员访问控制,只约束继承关系

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

当某个虚函数不希望被派生类覆盖时,在其声明末尾加 final,就能让编译器在子类中尝试重写该函数时报错。

使用场景:基类已提供最稳定实现(如关键协议方法、安全校验逻辑),业务层不得修改行为。

立即学习C++免费学习笔记(深入)”;

  • 只能用于虚函数(包括纯虚函数),非虚函数加 final 是非法的
  • 写法示例:virtual void process() final;virtual int get_id() const final = 0;
  • 若子类中声明同签名函数,即使没加 override,也会报错:error: virtual function 'process' cannot be overridden because it is final
  • finaloverride 可同时出现,但顺序必须是 virtual void f() override final;

final 不能用在普通函数、变量或命名空间里

final作用域非常受限,仅对类和虚函数有效。试图在其他位置使用会导致编译失败。

Smart Picture
Smart Picture

Smart Picture 智能高效的图片处理工具

下载

容易踩的坑:

  • 写成 void func() final {} —— 编译器报 error: 'final' cannot be used here
  • 在变量声明前加 final int x = 42; —— 这不是 C++ 的语法,C++ 中没有“变量 final”概念(那是 Java/C# 的用法)
  • 在命名空间或函数体内写 final —— 无意义,直接报错
  • 误以为 final 能阻止对象复制或移动 —— 它完全不干预构造、析构、赋值等操作

和 sealed / override 的兼容性与注意事项

C++ 标准只认 finaloverride,没有 sealed(那是 C++/CLI 或 C# 的)。有些旧代码或跨平台项目可能混用宏封装,需特别注意展开后是否符合标准语法。

性能影响几乎为零:这些是编译期约束,不生成额外运行时代码,也不影响内联或虚表布局(除非编译器据此做优化)。

  • 基类函数标了 final,派生类仍可定义同名非虚函数(隐藏而非重写),但这通常违背设计意图,建议配合 override 使用以避免意外隐藏
  • 多重继承中,只要任一基类的虚函数被标为 final,所有路径上都不允许重写它
  • 头文件中使用 final 时,确保所有依赖方都支持 C++11 或更高标准(g++ -std=c++11,MSVC 2012+)

真正容易被忽略的是:final 不具备传递性 —— 父类标记 final 只锁住直接继承,不影响其成员函数是否可被间接调用;而函数级 final 只封死那一个签名,不阻止重载其他参数版本。这两点在大型继承体系中经常引发理解偏差。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

268

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

305

2023.10.25

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

289

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

259

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

126

2025.08.07

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

533

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.02

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

2

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.2万人学习

C# 教程
C# 教程

共94课时 | 8.4万人学习

Java 教程
Java 教程

共578课时 | 56.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号