当前位置: 首页 > news >正文

日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)

新来的同事提到一个虚函数解耦头文件的问题,就想起来对虚函数进行一些回顾。
他的问题是,通过纯虚函数,如何实现不包含头文件即可真正调用到子类的实际接口。
====》这里肯定是不合理的,需要一个中间管理类,对纯虚函数和相关子类进行管理,实现接口调用。(类似工厂模式,实现解耦吧)。
====》衍生考虑,通过基类调用到真实的子类行为接口,知识点整理。

记忆中遇到过继承相关的架构代码,记忆中一个点就是:通过容器存储基类的指针,实际指针进行调用时为子类的接口。

1:在使用的角度考虑:核心还是通过基类指针调用实际子类接口。

一般继承是为了实现多态,通过基类指针可以实现不同子类对象的存储,统一调度。
====》通过基类调用接口时,实际上调用的是真正的子类中行为接口。
在这里插入图片描述

2:原理:虚指针和虚函数表

虚指针:每个有虚函数/纯虚函数的类,或者继承自(有虚函数/纯虚函数的类)的类,构造对象时,都会隐藏构造一个指针。
虚函数表是静态的,在编译时就已经确定了,每个类静态绑定函数地址。

虚继承:维持的是一个虚基类表,和一个虚基类指针。

====》这里虚函数表vtable 是 类级别唯一的静态表,这个应该是通过编译器定义的一个全局符号找到的。 (nm XXX| c++filt | grep ‘vtable for’)
====》虚基类表(虚继承中)也是静态的,目的是为了菱形继承时继承同一个实例。 (这里共享相同的函数和成员? 只有一份,成员共享问题如何处理? 使用cl指令验证查看)

在这里插入图片描述

3:销毁:继承情况下,子类释放流程/基类析构virtual

在这里插入图片描述

使用vs(项目–>属性–>C/C++ —> 命令行—》其他选项中增加 /d1 reportSingleClassLayoutXXX XXX为类名)或者cl指令,可以编译时查看对应cpp文件中类的内存布局,对相关逻辑进行验证。

相关文章:

  • C++函数栈帧详解
  • 【MCP】function call与mcp若干问题整理
  • 华泰商会:顺应时代,服务企业赋能行业
  • 修改图像分辨率
  • Scaffold-DbContext详解
  • 计算机视觉注意力机制【一】常用注意力机制整理
  • 从电话到V信语音:一款App实现全场景社交脱身
  • shell-sed
  • AI驱动SEO关键词高效布局
  • 基于Django框架开发的企业级IT资产管理系统
  • 01Introduction
  • 《汽车噪声控制》复习重点
  • 用Deepseek分析生产环境om问题
  • 背单词软件开发英语app开发,超级单词表开发,河南数匠软件开发
  • 对称二叉树(简单)
  • FPGA图像处理(二)-----彩色图像灰度化
  • 嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
  • 注意力(Attention)机制详解(附代码)
  • 旧版谷歌浏览器Chrome v116.0.5845.141下载
  • 苍穹外卖(订单状态定时处理、来单提醒和客户催单)
  • 2025上海十大动漫IP评选活动启动
  • 聆听百年唐调正声:唐文治王蘧常吟诵传习的背后
  • 比特币价格时隔三个月再度站上10万美元
  • 呼和浩特65户业主被一房两卖,十年诉讼却难胜
  • 五一多城楼市火热:北京新房网签量同比翻倍,上海热门楼盘认购接连触发积分
  • 俄军击落多架企图攻击莫斯科的无人机