讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么使用override关键字_C++虚函数覆盖检查【重点】

冬雪君_8304

冬雪君_8304

发布时间:2026-03-15 08:51:12

|

386人浏览过

|

来源于php中文网

原创

override关键字只检查当前函数是否恰好覆盖基类中的虚函数,要求参数类型、const修饰、引用限定符、返回类型(协变除外)完全匹配。

c++怎么使用override关键字_c++虚函数覆盖检查【重点】

override 关键字到底检查什么

它只检查:当前函数是否**恰好覆盖了基类中一个虚函数**——不多不少,参数类型、const 修饰、引用限定符、返回类型(协变除外)都得对得上。不是“只要名字一样就行”,也不是“只要能多态调用就通过”。

常见错误现象:error: 'func' does not override any member functions,往往是因为拼写差一个字母、const 少写了、参数是 int 但基类是 int&,或者基类函数根本没加 virtual。

使用场景:所有你明确想覆盖虚函数的地方,尤其是继承链变深、接口变更频繁时。不加 override,改错基类签名可能让派生类函数悄悄变成新函数,静默失效。

什么时候必须写 override 才能编译通过

不是“必须写”,而是“写了就强制校验”。但以下情况不加 override 很容易埋雷:

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

  • 基类虚函数加了 const,而你重写的版本漏了 —— 不加 override 编译器默认当新函数,运行时调不到
  • 基类函数签名从 void f(int) 改成 void f(long),你的派生类仍留着 f(int) —— 不加 override 不报错,但已失去覆盖关系
  • 基类函数返回类型是基类指针,你返回派生类指针(协变),但忘了加 override —— 虽然合法,但失去编译期保障

override 和 virtual 能不能一起写

可以,而且推荐一起写。基类函数必须有 virtual,派生类覆盖时加 override 是独立语法,二者不冲突。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

示例:

struct Base {
    virtual void draw() const;
};
struct Derived : Base {
    void draw() const override; // ✅ 正确:既有 virtual(继承而来),又有 override 显式声明
};

注意:override 只能用于成员函数声明(在类内),不能用于定义(类外实现)。下面这样是错的:

void Derived::draw() const override { ... } → 编译报错:error: 'override' cannot be used here

兼容性与编译器支持差异

override 是 C++11 引入的关键字,所有现代编译器都支持,但要注意:

  • VS2012+、GCC 4.7+、Clang 3.3+ 完全支持
  • 如果项目还需兼容 C++98/03,不能用 override;但这种场景现在极少见
  • 某些旧版 IDE(如老版本 VS Code + C++ 插件)可能语法高亮异常,不影响编译,别被误报干扰
  • 宏定义里别碰 override —— 它是关键字,不是标识符,#define override final 这种 hack 会破坏语义且不可移植

最容易被忽略的一点:它不检查函数是否真的被调用,也不保证虚表布局正确;它只做签名匹配。虚函数调用是否生效,还得看对象实际类型和指针/引用的静态类型——这点和 override 本身无关,但很多人混淆。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

java多态详细介绍
java多态详细介绍

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

355

2025.11.27

scripterror怎么解决
scripterror怎么解决

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

1009

2023.10.18

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

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

3120

2023.10.25

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

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

15680

2023.12.04

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

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

1163

2024.02.23

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

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

8670

2025.06.11

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

120

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn