C++ 多态语法点

news2024/11/25 1:05:33

前置知识点

成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。
静态成员变量静态成员函数没有在类上存储。
非静态成员函数也不属于类的对象上

class Animal
{
	public:
	virtual void speak()
	{
		cout<<"动物在说话"<<endl;
	}

}

vfptr(virtual function table pointer)—虚函数(表)指针
指针指向虚函数表

vftable------虚函数表
表内记录虚函数的地址

在这里插入图片描述
如何记录呢,虚函数表内记录入口地址

&Animal:speak

如果直接继承,不重写父类的虚函数


会发生什么呢

在这里插入图片描述
子类会直接继承父类的虚函数表

如果重写父类的虚函数

当子类重写父类的虚函数,
子类的虚函数表内部会替换成子类的虚函数地址
而父类的虚函数表还是没有发生改变
在这里插入图片描述

当父类的指针或者引用指向子类对象的时候,就发生了多态

Animal& animal =cat;
animal.speak();

使用VS 2017的开发人员命令提示符工具进行验证

第一步:复制文件工程路径
在这里插入图片描述

第二步:跳转到复制的路径
在这里插入图片描述
第三步:查看有无 .cpp文件

在这里插入图片描述

第四步:输入c1 /d1 reportSingleClassLayoutAnima1 “01 多态基本概念.cpp
在这里插入图片描述

 
 
第五步:验证空类的所占内存空间为1
在这里插入图片描述

第六步:父类加上虚函数,而且子类不重写
验证父类此时所占内存空间为4,且存在虚函数指针
虚函数指针指向虚函数表,虚函数表内记录虚函数地址

在这里插入图片描述
在这里插入图片描述

 
 
第七步:子类不重写父类的虚函数,查看子类的存储,输入c1 /d1 reportSingleClassLayoutCat “01 多态基本概念.cpp

在这里插入图片描述

 
 

第八步:子类重写,输入c1 /d1 reportSingleClassLayoutCat “01 多态基本概念.cpp
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/973996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git快速使用

1、下载git 设置签名 2、基本概念 工作区&#xff1a;写代码的地方。 暂存区&#xff1a;.git的.index 工作区&#xff1a;.git 3、常用操作 本地codinggit init&#xff0c; 初始化一个本地仓库&#xff0c;项目根目录下会出现个.gitgit remote add origin gitgithub.com…

介绍GitHub

GitHub 是一个基于互联网的源代码托管平台&#xff0c;可以帮助软件开发者存储和管理源代码&#xff0c;方便团队协作和版本控制。GitHub 的主要功能包括&#xff1a; 代码托管&#xff1a;开发者可以在 GitHub 上创建远程代码仓库&#xff0c;存储和管理他们的源代码。 版本控…

Ubuuntu22.04 LTS 用户管理,新建用户 adduser,sudo,管理员用户

1、新建用户zzsn adduser zzsn 为用户修改密码 # 为用户修改密码 sudo passwd zzsn 2、验证用户是否创建成功 cat /etc/passwd | grep zzsn 查看系统中所有用户&#xff08;可选&#xff09; grep bash /etc/passwd 3、为新用户授予管理或sudo权限&#xff08;可选&#x…

说说 TCP的粘包、拆包

分析&回答 拆包和粘包是在socket编程中经常出现的情况&#xff0c; 在socket通讯过程中&#xff0c;如果通讯的一端一次性连续发送多条数据包&#xff0c;tcp协议会将多个数据包打包成一个tcp报文发送出去&#xff0c;这就是所谓的粘包。如果通讯的一端发送的数据包超过一…

请给系统加个【消息中心】功能,因为真的很简单

个人项目&#xff1a;社交支付项目&#xff08;小老板&#xff09; 作者&#xff1a;三哥&#xff0c;https://j3code.cn 项目文档&#xff1a;https://www.yuque.com/g/j3code/dvnbr5/collaborator/join?tokenCFMcFNwMdhpp6u2s&sourcebook_collaborator# 预览地址(未开发…

【网络编程】TCP/IP协议(互联网的基石)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

ChatGLM2 源码解析:`GLMBlock`

# GLM 块包括注意力层、FFN层和之间的残差 class GLMBlock(torch.nn.Module):"""A single transformer layer.Transformer layer takes input with size [s, b, h] and returns anoutput of the same size."""def __init__(self, config: ChatGL…

Abaqus非均质多相材料单元赋值插件:Random Material Mesh - AbyssFish

插件介绍 Random Material Mesh - AbyssFish 插件可在Abaqus软件将材料随机批量赋值给部件的网格单元。插件支持二维及三维部件的所有网格类型&#xff0c;可指定任意多种&#xff08;实际材料种类&#xff1c;10^7&#xff09;不同材料。注意&#xff0c;插件仅提供空材料指定…

用Qt自制一个小闹钟

小闹钟 功能 当按下启动按钮时&#xff0c;停止按钮可用&#xff0c;启动按钮不可用&#xff0c;闹钟无法设置&#xff0c;无法输入自定义内容 当按下停止按钮时&#xff0c;暂停播报&#xff0c;启动按钮可用&#xff0c;闹钟可以设置&#xff0c;可以输入自定义内容 .pro文…

Jetsonnano B01 笔记1:基础理解—网络配置—远程连接

今日开始学习 Jetsonnano B01&#xff0c;这是一台小电脑&#xff0c;可以用来&#xff1a; 运行现代 AI 负载&#xff0c;并行运行多个神经网络&#xff0c;以及同时处理来自多个高清传感器的数据&#xff0c;可广泛应用与图像分类、对象检测、图像分割、语音处 理等领域。它…

Jupyter Notebook 好用在哪?

Jupyter Notebook 是一个 Web 应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实时代码、数学方程、可视化和 Markdown&#xff0c;其用途包括数据清理和转换、数值模拟、统计建模、机器学习等等。目前&#xff0c;数据挖掘领域中最热门的比赛 Kaggle 里的资…

手机版翻页电子产品册是如何制作的?

手机版翻页电子产品册是一种通过手机设备进行浏览和翻阅的电子产品手册&#xff0c;闲来看一本手机就能阅览的产品图册吧&#xff01; 这本产品图册是在FLBOOK官网看见的&#xff0c;并且FLBOOK官网还支持在线制作&#xff0c;还有很多模板资源供小白自行创作 1.打开浏览器搜索…

奉化老牌多个域名通配符SSL证书

通配符SSL证书可以保护主域名以及主域名下的无限子域名&#xff0c;而多个通配符SSL证书则组成了一个新的SSL证书——多域名通配符SSL证书。多域名通配符SSL证书是一种特殊的SSL证书&#xff0c;他可以同时保护多个不同的泛域名&#xff0c;这种SSL证书非常适合那些拥有大量不同…

docker安装redis实操记录

1.Docker拉取镜像 docker pull redis2.Docker挂载配置文件 创建挂载文件夹 mkdir -p /home/redis/data下载默认配置文件 redis.conf 3.启动redis 容器 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name redis -v /home/redi…

学习Bootstrap 5的第三天

文字/排版 默认设置 font-size&#xff1a;Bootstrap 5 的默认字体大小为 16px&#xff0c;也可以通过自定义 CSS 样式来修改。line-height&#xff1a;默认行高为 1.5&#xff0c;这意味着每行文本的高度是字体大小的 1.5 倍。也可以通过自定义 CSS 样式来修改行高。字体设置…

IDEA搜索指定某个类的方法的引用位置

搜索方法引用位置的时候&#xff0c;如果该方法是接口定义出来的&#xff0c;则结果里会包含其他实现类的该方法的引用位置&#xff0c;但是像Object定义的Equals方法这种&#xff0c;搜索出来的结果是超级多的&#xff0c;根据没法看&#xff0c;因此想要只看该类的方法引用位…

Vue3分页组件基础使用 以及 给表格增加自增序列

分页组件使用 <div class"demo-pagination-block"><el-paginationv-model:current-page"dataVo.pageNum"v-model:page-size"dataVo.pageSize":page-sizes"[100, 200, 300, 400]":small"small":disabled"disab…

SAP message-06 027 供应商 还未为采购组织 创建

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 错误信息 When creating a RFQ in ME41 for a vendor that is not assigned to the Purchasing Organization, error "Vendor & has not been created for purch. organization"…

Solidity 小白教程:8. 变量初始值

Solidity 小白教程&#xff1a;8. 变量初始值 变量初始值 在solidity中&#xff0c;声明但没赋值的变量都有它的初始值或默认值。这一讲&#xff0c;我们将介绍常用变量的初始值。 值类型初始值 boolean: falsestring: “”int: 0uint: 0enum: 枚举中的第一个元素address: …

你用过 Maven Shade 插件吗?

文章首发地址 Maven Shade插件是Maven构建工具的一个插件&#xff0c;用于构建可执行的、可独立运行的JAR包。它解决了依赖冲突的问题&#xff0c;将项目及其所有依赖&#xff08;包括传递依赖&#xff09;合并到一个JAR文件中。 下面是对Maven Shade插件的一些详解&#xff…