C++入门学习 14 多态性与虚函数

多态:理解为:同一个函数有多个表现形式-----重用代码的一种方式

- 什么是多态性 重点 难点

  • 静态多态性
  • 动态多态性 -重写,
    - 纯虚继承与抽象类 重点

面向对象: 封装 继承 多态 抽象

什么是多态性

多态性(polymorphism)是面向对象变成的一个重要特征

  • 如果一种语言只支持类,而不支持类,是不能称为面向对象语言的
  • 如果一种语言只支持类概念,那么只能称为使用/基于对象的语言
    多态主要是在参数里

函数名相同,但执行的具体细节不相同

  • 在这里插入图片描述
    //重载:函数名相同,参数列表的类型或数量不同
    在这里插入图片描述
    使用函数重载的方式–静态多态或者编译时多态

在这里插入图片描述
准备3个版本的函数,输入什么就调用什么的移动方法,实现其移动
这是移动一个人物
若实现多个人物的,可以使用数组 – 容器
在这里插入图片描述
调用:
在这里插入图片描述
一般不对1.0版本的代码进行修改,做项目是不断添加过程,继承
核心代码不动,添加其他的特性------动态多态
静态多态—不灵活
函数重载—可以有模板函数,函数模板
在这里插入图片描述
动态多态性–实现函数重写(重写之后可以实现派生类的特殊功能,若不重写都是基类的基本功能)
在这里插入图片描述
在C++11版本之后,为了更高的体现子类方法重写父类方法,我们可以在被重写的方法后面添加override关键字

当传递Herol类型的子类型时,参数类型转换可以自动转换:
向上和向下转换:

  • 当B是A的子类型时(class B : public A),就意味着所有对A对象的操作都可以对B对象进行
  • 即: B重用A的操作来实现自己的操作
  • 向上转型:把子类型对象转换为父类型对象,下面有3个注意点:
    1.向上转型是安全的
    2.向上转型可以自动完成(自动类型转换)
    3.向上转型的过程中,会丢失子类型信息

在这里插入图片描述

虚函数的工作原理

在这里插入图片描述
虚函数中有一部分隐藏成员(指向虚函数表的指针),还有常规私有,公有成员
派生类重写override时,子类对象的成员函数动作会发生改变

为什么 需要虚析构函数?

	C 语言  name = (char*) malloc(sizeof(char)  * 20) //释放时需要free
	C++   name = new char[20];                                //释放时需要delete

如果父类的析构函数是非虚的析构函数,那么释放子类对象时,就只会调用父类的析构函数,而不会调用子类对象的析构函数
解决方案,:将基类的析构函数定义为虚析构函数

抽象类—通常为父类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
抽象类是不能够实例化的—直接成为父类

多态–通过不同子类实现不同功能

函数重写是动态多态性–需要纯虚函数。一个类的函数为纯虚函数—抽象类-抽象类不能创建对象
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值