C++ 多态向下转型详解

文章目录

    • 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 子类没有改进父类的方法下,去调用该方法

C++ 多态向下转型详解_第1张图片

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


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

C++ 多态向下转型详解_第2张图片

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


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

C++ 多态向下转型详解_第3张图片

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


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

C++ 多态向下转型详解_第4张图片

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


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

C++ 多态向下转型详解_第5张图片

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


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

C++ 多态向下转型详解_第6张图片

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

C++ 多态向下转型详解_第7张图片> 这里46行加了 向上转型,这样向下转型后,父类就不担心与子类不一样了,因此转换安全。


4 . 总结

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

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

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

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

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

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

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

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

你可能感兴趣的:(嵌入式,c++,java,开发语言,单片机,c语言)