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

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

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

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

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

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

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

http://www.dtcms.com/a/177227.html

相关文章:

  • 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下载
  • 苍穹外卖(订单状态定时处理、来单提醒和客户催单)
  • #黑马点评#(三)缓存穿透/雪崩/击穿
  • 【计算机基础】任意进制转换方法详解
  • C++ 基础复习
  • blender云渲染指南2025版
  • 如何在本地测试网站运行情况
  • 面试高频算法:最长回文子串
  • OpenCV 中用于背景分割(背景建模)的一个类cv::bgsegm::BackgroundSubtractorGSOC
  • windows10 环境下通过huggingface_hub下载huggingface社区模型
  • 碰一碰发视频源码搭建的技术迭代与升级实践
  • 金融小知识