【C++】虚函数表(vtable),函数重载,函数签名,
多态的底层实现逻辑编译器找对应虚函数的步骤this指针-vptr指针-vtable表虚函数表-对应的虚函数通过指针偏移vptr就是虚函数表的起始指针函数指针在虚函数表占的位置也是固定的。其实之前一直没明白为什么重定义不能实现多态这两个例子就可以很好区分重定义代码语言javascriptAI代码解释#define _CRT_SECURE_NO_WARNINGS 1 #include iostream using namespace std; class Animal { public: void speak() { std::cout Animal speaks std::endl; } }; class Dog : public Animal { public: void speak(){ std::cout Dog barks std::endl; } }; class Cat : public Animal { public: void speak() { std::cout Cat meows std::endl; } }; int main() { Animal* a1 new Dog(); Animal* a2 new Cat(); a1-speak(); a2-speak(); delete a1; delete a2; }在上面这个例子中a1a2都是Animal类型他们在不同的作用域中所以不会造成冲突。在调用speak函数的时候直接去基类作用域Animal中寻找都是找到的是基类的speak函数。这和编译器寻找虚函数完全不同重写/覆盖在Dog和Cat类中都有一张虚函数表他们继承父类Anima的虚函数表因为在Cat和Dog中对soeak函数都进行了重写所以他们自己的虚函数表的指针就发生了变化在虚函数表中对父类的speak函数进行覆盖。这样在调用对应的虚函数的时候就可以分别调用不同的虚函数了。调用的过程也是上面这样his指针-vptr指针-vtable表虚函数表-对应的虚函数为什么只有非静态成员函数才可以是虚拟的一个非静态成员函数函数在前面加上virtual就变成了虚函数。因为虚函数是在虚函数表中的虚函数表要靠vptr才能找到vptr要这个对象的this指针才能找到。静态成员函数是不需要靠虚函数的分类有纯虚函数和普通虚函数。有纯虚函数的类不能进行实例化必须在子类重写以后才能实例化。1.什么情况下会有虚函数表当一个类有虚函数的时候就会有虚函数表。2.实例化出来的对象是怎么去调用虚函数的对象会有一个指向虚函数表的虚指针vptr这个指针在64位平台是8字节在32位平台是4字节vptr是虚函数表的起始指针通过指针的偏移就可以找到对应的虚函数地址然后就可以进行函数调用。函数重载重定义重写/覆盖函数重载静态多态在同一个作用域类函数名相同参数不同的函数构成函数重载。仅仅是返回值不同不能构成函数重载。问题为什么编译器可以根据参数的不同构造出不同的函数从而形成函数重载但是仅仅返回值不同不能构成函数重载为了定位一个具体的函数编程语言中引入了函数签名。函数签名1.函数名称。2.参数列表参数的个数类型顺序不同都可以视作为参数列表的不同。在C语言中函数签名没有包含返回值但是有的编程语言中把返回值也作为函数签名的一部分所以如果一个函数的名称相同参数列表相同。只有返回值不同他们的函数签名是一样的。编译器就不能区分他们了。所以函数名相同参数的顺序和个数和类型不同可以区分出不同的函数这些函数叫函数虫子啊。

相关新闻

【CVPR26-洪少华-厦门大学】相似度即证据:为可解释且标注高效的医学主动学习校准过度自信的视觉语言模型

【CVPR26-洪少华-厦门大学】相似度即证据:为可解释且标注高效的医学主动学习校准过度自信的视觉语言模型

文章:Similarity-as-Evidence: Calibrating Overconfident VLMs for Interpretable and Label-Efficient Medical Active Learning代码:暂无单位:厦门大学、凯斯西储大学一、问题背景:医学影像AI的两大核心痛点当下医学影像分析中…

2026/5/17 9:32:43 阅读更多 →
Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

接触的原因 因开发自己的项目时,写接口文档很繁琐,查到后端都在用swagger等接口工具来记录接口文档,于是学习了一下,本文记录个人配置过程,有问题欢迎指正交流?? Swagger: Swagger是一种Rest API的表示方…

2026/7/5 7:12:41 阅读更多 →
公众号90w播放量,收益为啥只有 80+!

公众号90w播放量,收益为啥只有 80+!

前段时间测试爆了一篇文章阅读90w,但收益却只有87,让我们立马放弃了这个赛道。而这个赛道就是小绿书图文,小绿书爆起来首先是没有持续性,再一个收益非常低,所以我们就停掉了这个赛道。在最早的时候,一篇十万…

2026/7/5 2:22:54 阅读更多 →

最新新闻

叶兴阳双语音标,英语发音工具断层级天花板

叶兴阳双语音标,英语发音工具断层级天花板

功能向实测评价:叶兴阳双语音标,英语发音工具断层级天花板 深耕英语学习多年,试过市面各类音标教辅、发音软件、双语读物,唯有叶兴阳双语音标在功能性上做到全方位无短板,每一项核心功能都精准戳中自学、教学、精读全场…

2026/7/6 4:38:22 阅读更多 →
Python+OpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案对比评测

Python+OpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案对比评测

PythonOpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案深度评测车牌识别技术作为计算机视觉领域的重要应用,在智能交通、停车场管理等领域发挥着关键作用。本文将深入对比两种主流车牌识别方案:基于OpenCV 4.8的传统图像处理方案和基于Tesseract OCR 5.3的…

2026/7/6 4:38:22 阅读更多 →
3分钟掌握免费Android投屏神器:scrcpy终极使用指南

3分钟掌握免费Android投屏神器:scrcpy终极使用指南

3分钟掌握免费Android投屏神器:scrcpy终极使用指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 还在为手机屏幕太小而烦恼?想要在电脑大屏幕上操作手机应用&…

2026/7/6 4:36:22 阅读更多 →
2026小提琴选购攻略!吃透三大核心参数,5款高口碑机型实测推荐

2026小提琴选购攻略!吃透三大核心参数,5款高口碑机型实测推荐

一、内行干货!新手购琴必懂的三大核心参数其实判断一把小提琴的好坏,无需钻研复杂专业术语,只要吃透板材、工艺、音色三大核心维度,再把控好尺寸与配件细节,就能精准筛选出优质机型,避开99%的购琴误区。板材…

2026/7/6 4:34:21 阅读更多 →
2026年同声传译软件免费额度实测对比,差距竟然这么大谁才好用?

2026年同声传译软件免费额度实测对比,差距竟然这么大谁才好用?

先说结论:这类工具怎么选 没有万能的同声传译软件,2026年实测下来五款主流工具的免费额度差距确实超出预期。针对知识付费用户消化付费课程、整理播客内容、巩固学习效果的核心需求,不同工具的适配性完全不同。不要盲目追大厂,不…

2026/7/6 4:32:21 阅读更多 →
压榨机器,Hack,设计极限强度的网络应用

压榨机器,Hack,设计极限强度的网络应用

在《对话网友 - TCP一万连接系统设计》文后回复中,短短的评论不足以说明问题,于是单独撰文解释。 对于一般的应用来说,操作系统足以对付,对于极限应用来说,操作系统往往就成了我们的障碍,这里的障碍有两个意…

2026/7/6 4:32:20 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻