C++ 多态向下转型详解

news2024/11/16 5:35:29

文章目录

    • 1 . 前言
    • 2 . 多态
    • 3 . 向下转型
      • 3.1 子类没有改进父类的方法下,去调用该方法
      • 3.2 子类有改进父类的方法下,去调用该方法
      • 3.3 子类没有改进父类虚函数的方法下,去调用改方法
      • 3.4 子类有改进父类虚函数的方法下,去调用改方法
      • 3.5 子类调用父类没有的方法,去调用该方法
      • 3.6 子类的方法是虚函数,调用该方法
    • 4 . 总结


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


1 . 前言

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

2 . 多态

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

  1. 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。在编程语言和类型论中,多态指为不同数据类型的实体提供统一的接口。多态类型可以将自身所支持的操作套用到其它类型的值上。
  2. 向上转型提到父亲可以使用儿子的能力,那儿子想使用父亲的能力呢?这时候儿子就不要创新功法,否则就用不到父亲的传承了,如果儿子改进了功法,那就用不到对应父亲的功法了,这就是向下转型,父亲的功法重新传给儿子。

3 . 向下转型

【Q】什么是向下转型?
【A】之前向上转型讲述儿子把混沌体的真血移植给父亲,父亲阴差阳错下可以用儿子独有的能力,但在某一天,儿子遇到了问题,需要用到父亲的能力,那怎么办,此时父亲就要把真血重新移植给儿子,儿子就可以调用父亲的能力了

接下来列举几种向下转型后的情况

  1. 子类没有改进父类的方法下,去调用该方法
  2. 子类有改进了父类的方法下,去调用该方法
  3. 子类没有改进父类虚函数的方法下,去调用该方法
  4. 子类有改进父类虚函数的方法下,去调用该方法
  5. 子类调用父类没有的方法,去调用该方法
  6. 子类的方法是虚函数,调用该方法

3.1 子类没有改进父类的方法下,去调用该方法

在这里插入图片描述

这时候可以看到,子类直接调用到了父类的能力。


3.2 子类有改进父类的方法下,去调用该方法

在这里插入图片描述

这时候可以看到,子类直接调用的是自身的能力。


3.3 子类没有改进父类虚函数的方法下,去调用改方法

在这里插入图片描述

这时候可以看到,子类直接调用到了父类的能力。


3.4 子类有改进父类虚函数的方法下,去调用改方法

在这里插入图片描述

这时候可以看到,子类直接调用的是自身的能力,也就是说无论父类的能力到底是不是虚函数,对于向下转型来说都一样的。


3.5 子类调用父类没有的方法,去调用该方法

在这里插入图片描述

这时候可以看到,子类有自己的方法,即使向下转型后,仍然可以调用自己的方法


3.6 子类的方法是虚函数,调用该方法

在这里插入图片描述

这时候看到,打印窗口异常了,阻塞住了,说明内存异常了,为什么会这样,因为向下转型前没有进行向上转型,因此不安全,找不到具体内存,那么接下来展示一个正确的向下转型过程。

在这里插入图片描述> 这里46行加了 向上转型,这样向下转型后,父类就不担心与子类不一样了,因此转换安全。


4 . 总结

  • 子类没有改进父类的方法下,去调用该方法
    子类直接调用到了父类的能力

  • 子类有改进了父类的方法下,去调用该方法
    子类直接调用的是自身的能力

  • 子类没有改进父类虚函数的方法下,去调用该方法
    子类直接调用到了父类的能力

  • 子类有改进父类虚函数的方法下,去调用该方法
    子类直接调用的是自身的能力,也就是说无论父类的能力到底是不是虚函数,对于向下转型来说都一样的

  • 子类调用父类没有的方法,去调用该方法
    子类有自己的方法,即使向下转型后,仍然可以调用自己的方法

  • 子类的方法是虚函数,调用该方法
    如果没有进行向上转型,内存异常,因此如果向下转型,务必先向上转型

向下转型后,子类优先用子类自身有的方法,如果没有则用父类的方法,并且可以访问到父类的私有成员
重点 : 如果向下转型,务必先向上转型

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

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

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

相关文章

捕捉“五彩斑斓的黑”:锗基短波红外相机的多种成像应用

红外处于人眼可观察范围以外,为我们了解未知领域提供了新的途径。红外又可以根据波段范围,分为短波红外、中波红外与长波红外。较短的SWIR波长——大约900nm-1700nm——与可见光范围内的光子表现相似。虽然在SWIR中目标的光谱含量不同,但所产…

JRT控制打印机

本次测试打印机控制和纸张方向控制。 打印机状态 选择打印机 控制纸张 定义纸张 旋转纸张 不旋转纸张 A4

java代码规范(适合写程序之前先了解有助于开发协同)

目录 一、类定义 二、方法定义 三、接口定义 四、变量定义 1、命名规范: 2、类型规范: 3、常量规范: 五、static关键字 1、静态变量(类变量): 2、静态方法(类方法)&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C#) Baumer工业相机Baumer工业相机的图像剪切(ROI)功能的技术背景CameraExplorer如何使用图像剪切(ROI)…

Netty使用SSL实现双向通信加密

最近项目有个需求,TCP服务器实现基于证书通信加密,之前没做过,花了一些时间调研,今天整理下。 SSL(Secure Sockets Layer 安全套接字协议) 1、原理 算法原理 简而言之就是非对称加密算法 私钥自己持有,公钥发给对方,对方在发送信息的时候使用公钥进行加密数据,当接收到…

C++-类和对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下 6 个默认成员 函数。 默认成员函数:用户没有显式实现,编译…

【AI】DETR模型可视化操作

Detr作为目标检测的算法,不同于之前算法的就是注意力机制,注意力机制能够直观看出来模型对图像关注的点,这个直观到底怎么直观呢,我们只听别人说肯定是不行的,上手测试才是最好的方式,像论文中插图那样的使…

【网络流】最大流与Ford–Fulkerson算法

目录 一、引言1.1 网络流问题1.2 “流”的定义1.3 “割”的定义 二、最大流最小割2.1 最大流2.2 最小割2.3 最大流最小割定理2.4 最大流最小割定理证明 三、Ford–Fulkerson算法3.1 增广路径3.2 剩余图3.3 算法代码3.4 FordFulkerson Demo 一、引言 1.1 网络流问题 网络流问题…

【教学类-43-13】 20240103 (4宫格数独:错误版:768套) 不重复的基础模板数量:768套

作品展示:——4宫格 768套不重复模板(64页*12套题) 有错误,实际数量小于768套 背景需求: 测试4宫格数独基础模板有几种。 写个程序,验算是不是真的是乘阶法的288种。 代码展示: 768套4宫格题…

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

面对AI应用创新的风口跃跃欲试,满脑子idea,却苦于缺乏技术背景,不得不望而却步,这曾是许多开发者的苦恼,如今正在成为过去。 12月28日,WAVE SUMMIT深度学习开发者大会2023在北京举办。百度AI技术生态总经理…

【Java 基础】-- 实例化

1、定义 创建对象的过程就叫实例化。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。 2、实例化的几种方法 new 关键字创…

STM32学习笔记十七:WS2812制作像素游戏屏-飞行射击游戏(7)探索动画之故事板,复杂动画

要让物体沿着路径移动,必须同时修改X/Y两个值,用两个连续插值动画行不行? 在单片机这种单线程设备,两个TICK会前后脚进行修改,具有相同的时间跨度,所以似乎也是可以的。但是在支持多线程的设备&#xff0c…

【CVPR2023】使用轻量 ToF 传感器的单目密集SLAM的多模态神经辐射场

目录 导读 本文贡献 本文方法 轻量级ToF传感器的感知原理 多模态隐式场景表示 时间滤波技术 实验 实验结果 消融实验 结论 未来工作 论文标题:Multi-Modal Neural Radiance Field for Monocular Dense SLAM with a Light-Weight ToF Sensor 论文链接&am…

Java程序设计阶段测试1

一、单选题(共15题; 共30.0分) 2.0分 1、以下哪个是Java应用程序main方法的有效定义? A.public static void main(); B.public static void main( String args ); C.public static void main( String args[] ); D.public static boolea…

交换机02_共享式交换式

1、共享式网络 早期的以太网是共享式网络,它是由集线器(HUB)相连,由一个HUB相连了两台主机,形成一个冲突域也称广播域。 (1)相关名词解释 集线器 HUB中心的意思,集线器就是对接收…

VINS-MONO拓展1----手写后端求解器,LM3种阻尼因子策略,DogLeg,构建Hessian矩阵

文章目录 0. 目标及思路1. 非线性优化求解器2. 基于VINS-MONO的Marginalization框架构建Hessian矩阵2.1 estimator.cpp移植2.2 solve.cpp/preMakeHessian()2.3 solve.cpp/makeHessian() 3. solve.cpp/solveLinearSystem()求解正规方程4. 更新状态5. 迭代求解6. EVO评估结果7. 待…

drf知识--10

接口文档 # 后端把接口写好后: 登录接口:/api/v1/login ---> post---name pwd 注册接口 查询所有图书带过滤接口 # 前后端需要做对接,对接第一个东西就是这个接口文档,前端照着接口文档开发 公司3个人&#xff…

LaTeX语法、工具及模板大全(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 我之前把Markdown和LaTeX的语法写在一个博文里了,但是现在感觉还是应该拆开来比较合适,因为LaTeX太复杂了…… LaTex核心其实是套模板,但是为了套好模版,也需要学习一些具体的语法。 文章目录 1.…

14 简约登录页

效果演示 实现了一个简单的登录表单的样式,包括背景颜色、边框、字体颜色、字体大小、字体粗细、输入框样式、提交按钮样式等。当用户在输入框中输入内容时,输入框下方的提示文字会动态地变化,以提示用户输入正确的信息。当用户点击提交按钮时…

广播及代码实现

广播(Broadcast)是一种网络通信方式,它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息,让所有设备都能接收并处理。在广播中,通信的目标是整个网络而不是特定的单个设备。 向子网中…