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

C++面试8——虚函数表(vtable)

C++虚函数表(vtable)深度解析:面试与实战中的陷阱

在C++面试中,理解虚函数表(vtable)的实现机制是考察多态理解深度的关键。以下是深入浅出的解析,包含内存布局、工作原理以及实际开发中的崩溃陷阱:

一、虚函数表核心原理

1. 虚函数表基本结构

class Animal {
public:virtual void speak() { cout << "Animal sound\n"; }virtual void eat() { cout << "Eating\n"; }virtual ~Animal() {}
};class Dog : public Animal {
public:void speak() override { cout << "Woof!\n"; }void bark() { cout << "Barking!\n"; }
};

内存布局

Animal对象:+----------------+| vptr           | --> Animal的vtable+----------------+     [0]: &Animal::speak[1]: &Animal::eat[2]: &Animal::~AnimalDog对象:+----------------+| vptr           | --> Dog的vtable+----------------+     [0]: &Dog::speak   // 覆盖Animal::speak| Animal部分      |     [1]: &Animal::eat  // 未覆盖,保持基类版本+----------------+     [2]: &Dog::~Dog    // 覆盖析构[3]: &Dog::bark    // 新增虚函数

2. 虚指针(vptr)工作机制

Dog
http://www.dtcms.com/a/296206.html

相关文章:

  • 【华为】笔试真题训练_20250611
  • uni-app支付宝小程序样式穿透失效
  • 森马联合新华社推出纪实短片《蹲下来试试》,以“蹲”演绎「森柔牛仔」柔韧体验
  • Android Telephony UrspRule 介绍
  • Windows上用于跨平台开发的环境工具
  • 普通三方App一般只能使用安卓原生Framework提供的公开接口
  • 螺杆支撑座安装后如何检验它的稳定性?
  • 力扣面试150题--在排序数组中查找元素的第一个和最后一个位置
  • Java中的静态变量是在“堆“还是“方法区“?
  • 无人机微型风速风向仪:翱翔天际的 “风之侦探”
  • GISBox实操指南:如何将IFC文件高效转换为3DTiles格式‌‌
  • docker及docker-compose离线安装包下载
  • Java中的抽象类 abstract 关键字
  • 第一节:认识大模型微调
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(上)
  • 【论文|复现】YOLOFuse:面向多模态目标检测的双流融合框架
  • IROS-2025 | OIKG:基于观察-图交互与关键细节引导的视觉语言导航
  • 疯狂星期四第17天运营日记
  • 手写DQN (FrozenLake环境)
  • 飞牛系统安装DataEase自定义Docker包
  • 医疗行业新变革:AR 培训系统助力手术培训精准高效​
  • 大模型回复数据标注优化方案
  • STM32-FSMC
  • 利用Web3加密技术保障您的在线数据安全
  • Java学习----原型模式
  • 草稿未完成!Linux网络系统【文件传输】【I/O 多路复用】
  • docker安装 Elasticsearch、Kibana、IK 分词器
  • 基于SpringBoot+Vue的电脑维修管理系统(WebSocket实时聊天、Echarts图形化分析)
  • 二分查找----5.寻找旋转排序数组中的最小值
  • 【从0开始学习Java | 第3篇】阶段综合练习 - 五子棋制作