1.概述:
- 多态指同样的消息被不同类型的对象接收时导致不同的行为。
- 多态的类型:重载多态、强制多态、包含多态、参数多态。
* 重载多态:通过重载其参数列表实现
* 强制多态:指将一个变元的类型加以变化,以符合一个函数或操作的要求。
* 包含多态:类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。
* 参数多态:模板
- 多态实现:编译时多态、运行时多态
2.运算符重载
- 运算符重载规则:
* 除少数几个外,全部可以重载,并且只能重载C++中已有的运算符(. * :: ?:)
* 重载之后的运算符的优先级和结合性都不会改变
* 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原有运算符的操作对象个数,同时至少要有一个操作对象时自定义类型。
- 重载语法:
返回类型 operator 运算符(形参表){}
- 运算符重载为成员函数
- 运算符重载为非成员函数
3.虚函数:虚函数是动态绑定的基础,必须是非静态成员函数。经过派生之后,在类族中就可以实现运行过程中的多态。
- 声明语法:virtual 函数类型 函数名(形参表)
- 虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候
- 运行中多态的3个条件:
* 类之间满足赋值兼容规则
* 声明虚函数
* 由成员函数来调用或者通过指针、引用来访问虚函数
- 虚析构函数:解决释放不同类的内存释放问题
4.纯虚函数与抽象类
抽象类是为了抽象和设计的目的而建立。抽象类是带有纯虚函数的类,为了通过它多态的使用其中的成员函数。无法实例化一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。
- 纯虚函数与一般虚函数的原型在书写格式上的不同就在于后面加了“=0”,基类中可以不再给出函数的实现部分。
- C++的类类型分为两类,多态类型和非多态类型。多态类型指有虚函数的类,非多态指其他。
- 虚函数:通过虚表实现
- 重载是方法名相同,参数列表不同;重写是函数声明部分相同,不一样的实现部分,必须要通过继承。
5.参数化多态:将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象
- 函数模板:template
- 类模板:使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,返回值或局部变量能取任意类型