C++ 多态向下转型详解

发布时间:2024年01月03日


【极客技术传送门】 : 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
群内专注 - 问题答疑,项目外包,技术研究

文章来源:https://blog.csdn.net/Engineer_LU/article/details/135367942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。