C++ 多态向上转型详解

文章目录

    • 1 . 前言
    • 2 . 多态
    • 3 . 向上转型
    • 4 . 总结


【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

  • 此篇博文详解C++的多态向上转型
  • 平台 : Qt

2 . 多态

【Q】什么是多态?
【A】解释如下 :

  1. 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。在编程语言和类型论中,多态指为不同数据类型的实体提供统一的接口。多态类型可以将自身所支持的操作套用到其它类型的值上。
  2. 比如父亲有一个儿子,父亲是荒古圣体,儿子自己修炼出了混沌体同时也继承了父亲的荒古圣体,有一天,父亲受伤了,儿子把混饨体的真血移植给父亲,父亲因此可以使用混饨体的能力,这就是向上转型,儿子的能力移植到父亲身上

3 . 向上转型

【Q】什么是向上转型?
【A】儿子把混沌体体的真血移植给父亲,父亲阴差阳错下可以用儿子独有的能力,这样不是向下转型吗,为什么说是向上,这里的向上指的是儿子的能力赋予了父亲,因此称为向上转型
在这里插入图片描述

上图中最后父亲可以调用儿子混沌体的能力,但这有个条件,就是父亲受伤了(如图中Father的func函数是虚函数),因此当移植了儿子的真血后,可以使用儿子的能力,但是如果父亲没有受伤或伤的很轻呢?(Father的func函数不是虚函数),如下图

在这里插入图片描述

父亲没受伤或伤的很轻,这时候即使移植了儿子的真血,依然用不到儿子的部分能力,因为把相同的部分排斥了,就好比父亲伤的只是肾,但是手脚还在,这时候移植了儿子的真血后,自己手脚是完好无缺的,会排斥新来的手脚功能,只是肾伤到了,因此不排斥儿子的肾功能,下次运功时调用的是儿子的肾功能!所以父亲即使移植了儿子混沌体的真血后,依然使不出混沌体的全部能力,身体的一部分会继续使用荒古圣体的能力!

4 . 总结

向上转型是把子类的能力给到父类,基于父类能否调用子类的能力,看父类自身的函数是不是虚函数,若是虚函数,则可以使用子类的能力,注意这里提到的能力,是父类子类都有接口,只是接口的具体实现不一样,如果父类没有子类的接口,却去调用子类的接口,在向上转型里是禁止的。

向上转型父类如果自己有实现优先调用自己的实现,如果自身虚函数,则调用子类方法

技术交流QQ群 : 745662457
群内专注 - 问题答疑,项目外包,技术研究

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

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

相关文章

2024,这将是量子计算的真正挑战

2023年,一项项量子计算纪录被打破。 谷歌量子AI团队证明了将多个量子比特分组合成为一个逻辑量子比特的纠错方法可以提供更低的容错率。以往的纠错研究随着比特数的增加,错误率会提高,都是“越纠越错”,而这次谷歌首次实现了“越纠…

【springboot+mybatis实现CURD模版项目-Jesus】

springbootmybatis实现CURD模版项目-Jesus STEP 1 项目创建 1.1 新建Spring Initializr项目   1.2 选择需要的依赖 springboot有2.7.2直接选272STEP 2 配置更改 2.1更改maven配置   2.2 检查项目配置jdk、sdk、jre版本一致   2.3 检查pom文件,Maven-Reload pr…

grep笔记240103

常用选项:: -i:忽略大小写进行匹配。 -v:反向匹配,只打印不匹配的行。 -n:显示匹配行的行号。 -r:递归查找子目录中的文件。 -l:只打印匹配的文件名。 -c:只打印匹配的行…

11-2 RHEL8配置YUM软件仓库及安装拼音输入法

配置本地YUM源 一、虚拟机关机>>虚拟机设置>>CD/DVD,关联ISO镜像文件,勾选“启动时连接”,点确定 二、开启虚拟机, 使用root用户登录。用df -h 命令可以看到光驱已经正常连接了。如果看不到/dev/sr0,需…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

铁塔基站数字化管理监测解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

CCF录用率怎么看?如何挑选合适的会议

写在前面 写此文是因为有同学问我如何确定自己能投稿的会议。首先,不建议直接用他人汇总好的数据(截稿时间和录用率),如果遇到更新不及时的很有可能耽误自己的工作。 平常,我都会自己收集预计投稿时间的会议信息&…

6张思维导图,js基础(基本概念,操作符,语句,Date,函数,数组,字符串)

一,js基本概念 二 ,js操作符 三,js基本语句 四,Date 常基本用方法汇总 五,数组基本及常用方法汇总 六,字符串基本及常用方法汇总 满满的都是干货。 附送250套精选项目源码 源码截图 源码获取:…

Ansible、Saltstack、Puppet自动化运维工具介绍

本文主要是分享介绍三款主流批量操控工具Ansible、Saltstack、Puppet主要对比区别,以及Ansible和saltstack的基础安装和使用示例,如果觉得本文对你有帮助,欢迎点赞、收藏、评论! There are many things that can not be broken&am…

【Java干货教程】Stream流详解

一、Stream流的简介 1.1、Stream流的概述 Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。 Stream流是从支持数据处理操作的…

npm发布js工具包

一、创建项目 1、在github上创建一个项目,然后拉取至本地,进入项目目录2、执行 npm init 生成json文件3、创建 src/index.ts 入口文件和 src/isObject.ts 工具方法 src/index.ts export { default as isObject } from ./isObject src/isObject.ts /…

[C#]yolov8-onnx在winform部署手势识别模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

专题一:递推与递归

递归 例题 递归实现指数型枚举 从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。 对于没有选任何数的方案&#xff0c…

抖店申请流程是什么?

我是电商珠珠 想要入驻抖店的人很多,但是知道流程的新手却没有几个。 从开店资料到入驻流程,我来具体的跟大家讲一讲。 第一个,新手开店资质 1、营业执照 营业执照是入驻门槛之一,营业执照类型分为两类,一类为企业…

鸿蒙4.0开发实战(ArkTS)-闹钟制作

闹钟功能要求 展示指针表盘或数字时间。添加、修改和删除闹钟。展示闹钟列表,并可打开和关闭单个闹钟。闹钟到设定的时间后弹出提醒。将闹钟的定时数据保存到轻量级数据库。 闹钟主界面 闹钟界面包括当前时间、闹钟列表、添加闹钟子组件,具体包括以下…

共享企业文件数据信息:实用方法与技巧分享

在当下快节奏的企业办公生活中,如何有效且高效的进行企业文件数据信息共享,保持企业竞争力,是许多企业团队面临的问题。 诚然,社交媒体工具的出现可以缓解企业信息共享协作的痛点。然而,多平台工具的交叉使用又使企业…

Zuul相关面试题及到案(2024)

1、什么是Zuul?它在微服务架构中有什么作用? Zuul是Netflix开源的一种提供API网关服务的应用程序,它在微服务架构中扮演着流量的前门角色。主要功能包括以下几点: 路由转发:Zuul网关将外部请求转发到具体的微服务实例…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

🦉 AI新闻 🚀 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要:斯坦福和Meta的学者发表论文为Gemini正名,他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…

vue-mixins混入处理

定义 mixins(混入):一种分发 Vue 组件中可复用功能的非常灵活的方式,mixins 是一个 js 对象,它可以包含我们组件script中的任意功能选项,如:data、components、methods、created、computed 等等…

MySQL 存储引擎和索引类型介绍

1. 引言 MySQL 是一个流行的关系型数据库管理系统,提供多种存储引擎以满足不同的业务需求。本文将介绍几种常见的 MySQL 存储引擎和索引类型比较,并给出相应的示例。 2. 存储引擎概述 2.1 InnoDB 存储引擎 InnoDB 是 MySQL 的默认存储引擎&#xff0…