浅谈为什么多态只能是指针或引用

news2024/11/22 19:07:10

其实在很早之前,我一直没有注意到这个问题,直到今天碰见了一道题,顺便前面的博客中,继承写到,子类中不包含父类,子类只是继承了父类的成员变量和函数,由这一点,引发了我对切片以及赋值的疑惑,为什么只有指针和引用才可以发生多态呢?

那么很多人可能想说的是,这不就是概念吗,也就是说C++委员会定标准就是这样定的,其实我想说的是,如果看过我上一篇内容的朋友,应该也会想到这个问题。如下:

B继承了A,但是其实B中不包含A的,只不过是B中有了A的成员函数和一些成员变量,但是如果此时A中有虚函数呢?那么此时B中就会发生重写,也就是覆盖,会有虚函数表指针,但是我想说的是,我们在继承中学习过切片,切片是不牵扯类型转换什么的,但是你想过类似于下面的代码吗?

因为B继承了A,所以此时的B的虚函数指针指向的虚函数表与A不同,但是此时这里发生了切片,如果就像我们平时所说的,切片没有发生类型转换,只是将B类中A的那部分赋值给A的对象,那么此时按道理说赋值给A的对象的那个虚函数表,此时应该是B中重写之后的。但是不是,我们可以看看结果。

他既然是没有重写之前的,怎么会回事,难道B中,没有重写吗?其实不是的。在这里有两种说法:第一:在赋值拷贝的时候,不拷贝虚函数表指针。这样的话,A就是用的自己的虚函数表指针。所以此时打印出来就是没有重写的.(这种说法也是我的老师说的)。

第二:因为在切片的时候,其实是发生了浅拷贝的,所以此时因该是A的对象与B的对象一样,不仅一样,如果他们中有指针,还是两个指针指向同一个地址的,但是这里明显没有,所以只有一个解释,那就是B在发生切片的时候,B的虚函数指针指向发生了变化。所以这里有小小的隐式类型转换。(此方法是上网查询,唯一能解释的通的,且自己明白的说法)

而引用和指针其实是一个道理,拿指针来说,把子类对象地址的开头给父类指针,所以这里也没办法变啊,引用也是一个道理,引用就是起别名,他是给子类对象中父类的成员函数,变量等起了一个别名,这个怎么变啊?所以,这样的话,就相当于是可以发生多态。

对此,大家有什么看法吗?

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

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

相关文章

I/O设备管理

目录 I/O设备管理(1) 第一节 I/O设备管理的基本概念 一、I/O设备管理的任务 二、I/O设备分类 三、I/O设备管理与文件管理的关系 第二节 I/O硬件和I/O软件的组成 一、I/O硬件组成 二、I/O软件组成 三、设备独立性 第三节 I/O设备控制方式 一…

虚拟机安装 centos

title: 虚拟机安装 centos createTime: 2020-12-13 12:00:27 updateTime: 2020-12-13 12:00:27 categories: linux tags: 虚拟机安装 centos 路线图 主机(宿主机) —> centos --> docker --> docker 镜像 --> docker 容器 — docker 服务 1.前期准备 一台 主机 或…

图像相关名词概述

颜色模式 通过赋予C的不同维度不同的含义,可以用来描述不同的颜色空间。颜色模式,是将某种颜色表现为数字形式的模型,或者说是一种记录图像颜色的方式。本单元主要讲述两个常用的颜色模式:RGB,HSV。 RGB模式是工业界的…

数字IC笔试千题解--多选题篇(三)

前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的。 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料…

机器学习(19)---XGBoost入门

XGBoost 一、概述1.1 使用XGBoost库1.2 XGBoost的三大板块 二、集成算法及重要参数2.1 概述2.2 XGBoost的简单建模2.3 n_estimators学习曲线2.4 方差与泛化误差2.5 重要参数subsample2.6 迭代决策树:重要参数eta 三、XGBoost的智慧3.1 概述3.2 XGB的目标函数&#x…

26. 图论 - 树

文章目录 树生成树最小生成树图与人工智能人工智能数学基础Hi,你好。我是茶桁。 这一节课是我们AI秘籍整个数学篇的最后一节课。同样的,这节课的概念还是比较重要的。我们要来了解一下「树」。 树 树其实是图的一种,首先呢它是一个连通图,是一个不含圈的连通图。 什么叫…

开机自启动Linux and windows

1、背景 服务器由于更新等原因重启,部署到该服务上的响应的应用需要自启动 2、Linux 2.1 方式一 编写启动应用的sh脚本授权该脚本权限 chmod 777 xxx.sh 修改rc.loacl 位置:/etc/rc.local 脚本:sh /home/xxxx.sh & 授权rc.local …

项目管理和问题跟踪工具Redmine

【勘误】:网友 Bnake 指出,用青龙面板实现阿里云盘每日签到 一文中,新建变量值时,变量名应该为 refreshToken,而不是截图中的 refresh_Token,非常感谢他的仔细和认真~ 什么是 Redmine ? Redmine…

云计算与大数据——Spark的安装和配置

云计算与大数据——Spark的安装和配置 Spark的简单介绍: Apache Spark是一个基于内存的分布式计算框架,它提供了高效、强大的数据处理和分析能力。与传统的Hadoop MapReduce相比,Spark的主要优势在于其能够将数据集缓存在内存中&#xff0c…

Abaqus多孔材料、多孔介质、双相材料、随机三维多孔结构建模插件:Random Porous Structure 3D

插件介绍 Random Porous Structure 3D - AbyssFish 插件可在Abaqus软件内生成三维多孔结构,可用于两相材料或多孔介质的模拟等。 插件可指定孔隙的分布概率、生长概率、孔隙率、平滑范围等参数,其参数控制原理可参考四参数随机生长法(QSGS…

开源C# Winform Scada 上位机系统

开源Winform Scada系统 功能展示C#源码程序说明下载程序源码获取 功能展示 本软件目前包含: 常用PLC通讯控件, 常用IO读写控件, 权限过滤, 用户管理, 日志记录, 报警记录. 使用方式: 在VS2022里面拖放控件, 填写控件属性,完成组态.即可成为一个完整的上位机. C#源码 程序说明…

CSS 滚动驱动动画 view-timeline (view-timeline-name ❤️ view-timeline-axis )

view-timeline 我们之前在 scroll() 中提到了一个因为绝对定位导致滚动无效的问题, 并使用 scroll-timeline 成功解决了这个问题, 而 scroll-timeline 起到的作用就是指定到底是哪个元素提供 scroll progress timeline. 与此相似, view-timeline 定义了一个具名的 view progre…

25504-2010 冰葡萄酒 知识梳理

声明 本文是学习GB-T 25504-2010 冰葡萄酒. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了冰葡萄酒的术语和定义、要求、分析方法、检验规则、标签标识和包装、运输、贮存。 本标准适用于冰葡萄酒的生产、检验和销售。 2 规范…

【Servlet】Servlet API 详解

Servlet API 详解 一. HttpServlet1. 核心方法2. 代码示例: 处理 GET 请求3. 关于乱码问题4. 代码示例: 处理 POST 请求 二. HttpServletRequest1. 核心方法2. 代码示例: 打印请求信息3. 代码示例: 获取 GET 请求中的参数4. 代码示例: 获取 POST 请求中的参数(1)5. 代码示例: 获…

Ubuntu修改下载源

1、问题情景 (1)在虚拟机VMware中安装Ubuntu后,可以正常上网。 (2)可以ping www.baidu.com检查网路是否联通。 (3)连通后下载软件是总是下载失败。 (4)环境 Ubuntu: Ubuntu 22.04.2 LTSVMware: 17.0.0 2、解决方法_修改下载源 (1)打开Ubuntu。 (2)点击“显示…

基于微信小程序的在线视频课程学习平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…

【数据结构】基本概念和术语

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 🌳1.数据 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.是计算机程序加工的"原料". 数据不仅包…

数据库基础理论

什么是数据库? 数据:描述事物的符号记录,可以是数字、文字、图形、图像、声音、语言等,数据有多种形式,他们都是可以经过数字化后存入计算机。 数据库:存储数据的仓库,是长期存放在计算机内、…

tensorflow损失函数

tf.losses.mean_squared_error(label, predict) 对label类型并不要求 >>>y_int tf.convert_to_tensor([1,0,1], tf.int32) >>>y tf.convert_to_tensor([1,0,1], tf.float32) >>>y_pred tf.convert_to_tensor([0.2,0.3,0.4], tf.float32) >&…

探索 GO 项目依赖包管理与Go Module常规操作

探索 GO 项目依赖包管理与Go Module常规操作 文章目录 探索 GO 项目依赖包管理与Go Module常规操作一.Go 构建模式的演变1.1 GOPATH (初版)1.1.1 go get 1.2 vendor 机制(中版)1.3 Go Module(最新版) 二.创…