多态
作者:互联网
一、多态的概念
通俗来说, 就是多种形态; 具体点就是去完成某个行为, 当不同的对象去完成时会产生不同的状态。
举个例子: 比如当你在火车站买票, 普通成人买票时, 是全价买票; 学生买票时, 是半价买票; 军人买票时是优先买票。
二、多态的定义及实现
1.多态的构成条件
多态是在不同继承关系的类对象, 去调用同一函数, 产生了不同的行为。比如Student继承了Person。 Person对象买票全价, Student对象买票半价。
在继承中构成多态的两个条件:
- 必须通过基类的指针或者引用调用虚函数
- 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写
2.虚函数的重写
虚函数: 被virtual修饰的类成员函数称为虚函数
虚函数的重写(覆盖): 派生类中有一个跟基类完全相同的虚函数
返回值类型、函数名字、参数列表完全相同
3.C++11 override 和 final
final:修饰虚函数, 表示该虚函数不能再被继承
override: 检查派生类虚函数是否重写了基类某个虚函数, 如果没有重写编译报错
4.重载、覆盖(重写)、隐藏(重定义)的对比
三、抽象类
纯虚函数: 在虚函数声明的结尾加上 =0 ,表明此函数为纯虚函数
纯虚函数没有函数体,只有函数声明
抽象类: 包含纯虚函数的类叫做抽象类(也叫接口类)
抽象类不能实例化出对象, 派生类继承后也不能实例化出对象
只有重写纯虚函数,派生类才能实例化出对象
作用: 强制重写了虚函数, 也体现了接口继承关系
四、多态的原理
在基类的函数前加virtual关键字, 在派生类中重写该函数, 运行时将会根据对象的实际类型来调用相应的函数, 如果对象类型是派生类, 就调用派生类的函数, 如果对象类型是基类, 就调用基类的函数
标签:函数,派生类,多态,基类,买票,重写 来源: https://www.cnblogs.com/enjoyC/p/15102340.html