news 2026/10/8 22:40:10

C++多态的原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++多态的原理

C++多态的原理

  • 一.虚函数表指针
  • 二 .多态是如何实现的

一.虚函数表指针

下面编译为32位程序的运行结果是什么()
A.编译报错 B. 运行报错 C.8 D.12

classBase{public:virtualvoidFunc1(){cout<<"Func1()"<<endl;}protected:int_b=1;char_ch='x';};intmain(){Base b;cout<<sizeof(b)<<endl;return0;}

上面题目运行结果12bytes,除了_b和_ch成员,还多⼀个__vfptr放在对象的前面(注意有些平台可能会放到对象的最后面,这个跟平台有关),对象中的这个指针我们叫做虚函数表指针(v代表virtual f 代表function)。⼀个含有虚函数的类中都至少都有⼀个虚函数表指针,因为⼀个类所有虚函数的地址要被放到这个类对象的虚函数表中,虚函数表也简称虚表

二 .多态是如何实现的

大家可以以下面的代码辅助来理解

  1. 从下面代码我们发现 在我们Person类里面是有一个虚函数表的,我们把这个虚函数的地址放到了虚函数表里面,这就使得我们把派生类传给了基类 但是仍然可以调用派生类的虚函数 这就是从这个虚函数表里面找到的
  2. st里面不应该有两个虚函数的地址吗(一个基类一个派生类),为什么只显示了一个地址?
    答:那是因为我们的派生类重写了基类 把基类地址直接给覆盖掉了 这就使得我们只能调用我们的派生类的虚函数
  3. 如果基类虚函数的参数和派生类虚函数的参数都有默认值的话 那我们在虚函数里面打印这个值的话 打印的是谁的呢?
    答:打印的是我们的基类虚函数的默认参数值,因为我们这个参数在编译的时候就写死了 ,只是满足多态我们在找函数实现的时候是通过我们的虚函数表来寻找函数地址的


打印的还是基类的默认值

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 22:39:01

GCC 和 GDB命令简单解读

最近在带一个刚接触 Linux 的朋友过 C 的开发流程&#xff0c;发现编译和调试这两个环节&#xff0c;看着简单&#xff0c;真上手的时候一堆小细节会把人卡住。趁这个机会把我自己踩过的坑整理一下&#xff0c;也当是给自己留个备忘。 编译到底发生了什么 很多人写 C 就是 gcc …

作者头像 李华
网站建设 2026/10/8 22:38:08

传统文化视频的本地素材替换流程:从画面重复到成片差异化

如果你正在做历史解说或诗词赏析视频&#xff0c;大概率遇到过同一个问题&#xff1a;文案写到「赤壁之战」时&#xff0c;市面上的视频素材翻来覆去就那几段影视剧镜头&#xff1b;写到「大漠孤烟直」时&#xff0c;能用的风光画面也就那几帧。画面重复不只是观感问题&#xf…

作者头像 李华
网站建设 2026/10/8 22:34:55

不用配置环境!Codex 整合安装包,Windows/Mac 一键部署教程

前言 相比手动安装 Node.js、再敲命令行&#xff0c;一键安装包将环境配置、依赖安装与客户端部署一并打包&#xff0c;省去了繁琐的搭建步骤&#xff0c;非常适合不想折腾、希望快速上手的用户。全程只需按提示操作&#xff0c;几分钟内即可开始使用。 一、下载安装包 打开…

作者头像 李华
网站建设 2026/10/8 22:34:54

工业电源保护实战:电子保险丝加MCU策略打造热插拔无忧方案

前阵子调试一块 12V 工业控制板&#xff0c;客户反馈说工人带电把电源接头拔了又重新插上&#xff0c;板子偶尔会黑屏甚至烧掉后级器件。查到最后&#xff0c;问题出在热插拔瞬间的浪涌电流和触点抖动&#xff1a;输入端几十微法的电容被瞬间充电&#xff0c;电流尖峰直接把后级…

作者头像 李华
网站建设 2026/10/8 22:33:29

frp 内网穿透

阿里云服务器linux 操作系统 本地window 先下载frp :Releases fatedier/frp GitHub 第一部分&#xff1a;阿里云 Linux 部署 frps&#xff08;服务端&#xff09; 1.1 上传解压 通过 xshell/ssh 登录阿里云 ECS # 放到/usr/local目录 cd /usr/local# 上传压缩包到此目录…

作者头像 李华
网站建设 2026/10/8 22:30:49

智能对话压缩技术:用 PostgreSQL 持久化 AgentState 的上下文管理革新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华