一、多态性概述
1、静态多态实现的两种方式:模板和函数重载
2、动态多态(一般上所说的多态都是指动态多态)
示例:
- 若执行pa->f(pa),则由动态编联找到派生类,而pa静态类型为A*,所以输出3
- 若执行pa->f(&b),则由动态编联找到派生类,而&b静态类型为B*,所以输出4
二、虚机制的作用
2.1 虚机制的本质:通过子类型化来适应变化
- 若仅看图中蓝字部分是无法推出代码具体是如何实现的,因为有虚机制的存在。
- 据此可实现接口编程——用户接口和基类均无需变更。
2.2 虚机制的应用
- 由于开发develop函数为基类与派生类的共同行为,所以无需设置成虚函数,而开发内部的设计、编码、测试、维护函数则是不同派生类的不同功能,因此设置成纯虚函数,由子类来自行实现。
解决方法:
- 以统一接口实现了拷贝构造的功能。
- 只要能执行到X类的clone函数说明其动态类型一定是X类。
三、虚机制的意义与不足
3.1 意义:代码复用性增强 ,客户端和基类代码无需更改
3.2 不足:难以适应多个方向的变化
- 如此只需构造ImpF、ImpH、ImpG共计2 + 3 + 4 = 9种不同的子类,通过调整指针参数的顺序来实现2 * 3 * 4 = 24种情况。