【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout
author:&Carlton
tag:C++
topic:【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout
website:黑马程序员C++
tool:Visual Studio 2019
date:2023年7月24日
目录
父类使用虚函数前后类内部结构变化
子类重写父类虚函数的作用及其机理
父类使用虚函数前后类内部结构变化
首先父类成员函数speak没有使用virtual修饰,没有使用虚函数
此时父类内部结构为空,大小为1字节

使用virtual修饰后,即成员函数变为虚函数后
父类内部结构多了一个虚函数指针(vfptr),大小为4字节
虚函数指针指向虚函数表(vftable),虚函数表里存储的是父类Animal的虚函数speak()入口地址&Animal :: speak

程序源代码:
#include <iostream>
using namespace std;class Animal
{
public:void speak(){cout << "动物在叫" << endl;}
};class Cat :public Animal
{
public:void speak(){cout << "小猫在叫" << endl;}
};class Dog :public Animal
{
public:void speak(){cout << "小狗在叫" << endl;}
};void speak(Animal& animal)
{animal.speak();
}void test01()
{Cat cat;speak(cat);Dog dog;speak(dog);
}int main()
{test01();return 0;
}
子类重写父类虚函数的作用及其机理
子类内部结构
子类重写父类虚函数之前
子类继承父类所有信息,包括虚函数指针,虚函数指针指向的是子类的虚函数表,但虚函数表里的信息继承父类的虚函数入口地址&Animal :: speak
子类重写父类虚函数之后
子类虚函数指针指向的虚函数表里的信息更新,子类重写函数入口地址&Cat :: speak覆盖父类虚函数入口地址

因此,通过父类使用virtual修饰使用虚函数、以及使用父类指针定义或引用子类对象可以使用多态。
编译器在运行阶段根据传入的子类对象相应地更新虚函数表信息(晚绑定,运行阶段确定函数地址),使用该子类对象的重写函数。
运行结果:

欢迎指正与分享,谢谢!
相关文章:
【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout
author:&Carlton tag:C topic:【C】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout website:黑马程序员C tool:Visual Studio 2019 date:2023年7月24日 目…...
vue实现flv格式视频播放
公司项目需要实现摄像头实时视频播放,flv格式的视频。先百度使用flv.js插件实现,但是两个摄像头一个能放一个不能放,没有找到原因。(开始两个都能放,后端更改地址后不有一个不能放)但是在另一个系统上是可以…...
iptables安全技术和防火墙
防火墙:隔离功能 位置:部署在网络边缘或主机边缘,在工作中,防火墙的主要作用是决定哪些数据可以被外网访问以及哪些数据可以进入内网访问,主要在网络层工作 其他类型的安全技术:1、入侵检测系统 2、入侵…...
微信小程序开发5
一、自定义组件-插槽 1.1、什么是插槽 在自定义组件的wxml结构中,可以提供一个<slot>节点(插槽),用于承载组件使用者提供的wxml结构 1.2、单个插槽 在小程序中,默认每个自定义组件中允许使用一个<slot>进行占位,这种…...
【算法题】2681. 英雄的力量
题目: 给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为: i0 ,i1 ,… ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 max(nums[i0],n…...
fastutil简单测试下性能
前言 简单测试一下fastutil的实现和Java类库实现的速率。 使用jmh进行测试。 简单解释一下,每轮测试预热2次,每次1s;实测2次,每次1秒。 进行5轮测试。数组大小3种。 package fastutil;import it.unimi.dsi.fastutil.ints.IntArr…...
【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法
一. 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API。 二. 解决方案 华为地图SDK的地图相机有提供CameraPosition类&…...
腾讯云裸金属服务器CPU型号处理器主频说明
腾讯云裸金属服务器CPU型号是什么?标准型BMSA2裸金属服务器CPU采用AMD EPYC ROME处理器,BMS5实例CPU采用Intel Xeon Cooper Lake处理器,腾讯云服务器网分享落进书房武器CPU型号、处理器主频说明: 裸金属服务器CPU处理器说明 腾讯…...
工程安全监测无线振弦采集仪在建筑物中的应用
工程安全监测无线振弦采集仪在建筑物中的应用 工程安全监测无线振弦采集仪是一种用于建筑物结构安全监测的设备,它采用了无线传输技术,具有实时性强、数据精度高等优点,被广泛应用于建筑物结构的实时监测和预警。下面将从设备的特点、应用场…...
【iOS】isKindOfClass和isMemberOfClass方法
前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解,也就是苹果官方这幅图: 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现,无论是谁调用isKindOfClass方法都会…...
李飞飞「具身智能」VoxPoser:0预训练完成复杂指令
机器人接入大模型听懂人话 论文地址: https://voxposer.github.io/voxposer.pdf 项目主页: https://voxposer.github.io/ 参考链接: [1]https://twitter.com/wenlong_huang/status/1677375515811016704 [1]https://www.amacad.org/publicatio…...
前端八股文
info 毕业设计(课题、方向 本科毕业设计:家庭医生签约管理系统后台开发(微信小程序) 硕士课题:医学图像分割(婴儿脑分割) 51062319991129351X 邮编 重庆市南岸区 400000 13183849783 // 18728097929 // 13158442955 中国广电四川网络股份有限公司中江…...
前端年度工作述职报告优秀
前端年度工作述职报告优秀篇1 尊敬的各位领导、各位同仁: 大家好!按照20__年度我公司就职人员工作评估的安排和要求,我认真剖析、总结了自己的工作情况,现将本人工作开展情况向各位领导、同仁做以汇报,有不妥之处,希…...
【MyBatis 学习一】认识MyBatis 第一个MyBatis查询
目录 一、认识MyBatis 1、MyBatis是什么? 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 (1)配置数据库连接 (2)配置 MyBatis 中的 XML 路径 三、测试&#x…...
TCP 和 UDP
TCP(Transmission Control Protocol,传输控制协议) 是面向连接的协议,即在收发数据前,必须和对方建立可靠的连接,TCP的头部为20个字节。 UDP(User Datagram Protocol,用户数据报协…...
springboot配置自定义数据源(Druid德鲁伊)的步骤。
今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤。 方法一: 1.在pom.xml配置依赖(注释里面的内容) 2.配置自己的数据源设置,我是在yaml文件中配置的,顺便提醒一下,在配置yaml文件的时候缩进问题一定要注意…...
K8S:容器日志收集与管理
Kubernetes 里面对容器日志的处理方式,都叫作 cluster-level-logging,即:这个日志处理系统,与容器、Pod 以及 Node 的生命周期都是完全无关的。这种设计当然是为了保证,无论是容器挂了、Pod 被删除,甚至节点…...
Flutter系列文章-Flutter进阶
在前两篇文章中,我们已经了解了Flutter的基础知识,包括Flutter的设计理念、框架结构、Widget系统、基础Widgets以及布局。在本文中,我们将进一步探讨Flutter的高级主题,包括处理用户交互、创建动画、访问网络数据等等。为了更好地…...
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式
文章目录 1. 右值引用和移动语义1.1 左值引用和右值引用1.2 左值引用和右值引用的比较1.3右值引用的使用场景和意义1.4 左值引用和右值引用的深入使用场景分析1.5 完美转发1.5.1 万能引用1.5.2 完美转发 2. 新的类功能2.1 默认成员函数2.2 类成员变量初始化2.3 强制生成默认函数…...
rust学习-线程
Rust 标准库只提供了 1:1 线程模型 Rust 是较为底层的语言,如果愿意牺牲性能来换取抽象,以获得对线程运行更精细的控制及更低的上下文切换成本,使用实现了 M:N 线程模型的 crate 示例 use std::thread; use std::time::Duration;fn main() …...
北京SEO优化对网站有哪些影响
北京SEO优化对网站有哪些影响 在当今数字化时代,网站的SEO优化已经成为企业提升在线曝光和吸引潜在客户的重要手段。尤其在北京这个国际大都市,优化SEO不仅能够提升网站在本地的排名,还能带来更多的本地客户。本文将详细探讨北京SEO优化对网…...
SpeedyBee F405 V4 55A飞塔到手后,除了接线你还需要注意这3个关键设置
SpeedyBee F405 V4 55A飞塔实战配置指南:从避坑到性能调优 当你拿到这块集成了飞控与电调的SpeedyBee F405 V4 55A飞塔时,官方说明书可能已经帮你完成了硬件组装的基础部分。但真正的挑战往往始于地面站连接成功后的那一刻——那些说明书里没细说的"…...
MouseClick:解放双手的跨平台鼠标自动化神器,告别重复点击的烦恼
MouseClick:解放双手的跨平台鼠标自动化神器,告别重复点击的烦恼 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件…...
py每日spider案例之某website参数token获取(ob混淆,难度一般)
逆向参数: 请求代码: import requestsheaders = {"accept": "*/*","accept-language": "zh-CN,zh;q=0.9","cache-control": "n...
py每日spider案例之某website影视链m3u8获取(jsjiami.com.v5 混淆和aes算法 难度中等)
逆向参数: 逆向代码: CryptoJS = require(crypto-js);function decrypt(_0x11b1d8) {try {...
PP-DocLayoutV3实战教程:解决OCR漏检/错序问题的布局预处理方案
PP-DocLayoutV3实战教程:解决OCR漏检/错序问题的布局预处理方案 1. 引言:为什么需要专业的文档布局分析? 你有没有遇到过这样的情况:用OCR工具识别扫描文档时,文字顺序乱七八糟,标题被误认为正文…...
RVC模型训练全攻略:如何用3分钟打造专属语音模型
RVC模型训练全攻略:如何用3分钟打造专属语音模型 1. 引言:为什么选择RVC? 在当今数字内容创作蓬勃发展的时代,拥有一个独特的语音模型已经成为许多创作者和企业的刚需。RVC(Retrieval-Based Voice Conversion&#x…...
Qwen3.5-9B Visio图表描述生成:从文本到系统架构图的自动构思
Qwen3.5-9B Visio图表描述生成:从文本到系统架构图的自动构思 1. 引言:架构设计的效率革命 想象一下这样的场景:你正在会议室里和团队讨论一个新项目的系统架构。白板上画满了各种方框和连线,但总觉得不够系统化。回到工位后&am…...
智能预处理+动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析
智能预处理动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析 1. 从二次元到三次元:一个引擎的诞生 你有没有想过,自己珍藏的二次元老婆或者某个酷炫的动漫角色,如果变成真人会是什么样子?是五官更立…...
2025届毕业生推荐的五大AI科研工具推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为能切实有效地把知网针对于人工智能创作出来的内容之检测概率降低下来,给出如下…...
