多态是c++面向对象三大特性之一
多态的优点:
代码组织结构清晰
可读性强
利于前期以及后期的扩展以及维护
多态分为两类:
静态多态:函数重载和运算符重载属于静态多态,复用函数名
动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态的区别:
静态多态的函数地址早绑定 - 编译阶段确定函数地址
动态多态的函数地址晚绑定 - 运行阶段确定函数地址
动态多态后的animal类:
动态多态后的cat类:
tips:怎么查看底层类结构的方法在上篇博客有写
1、普通写法
缺点:如果想扩展新的功能,需要修改源码
在真实开发中,提倡“开闭原则”,即:对扩展进行开放,对修改进行关闭
2、利用多态
在多态中,通常父类虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数
纯虚函数语法: virtual 返回值类型 函数名 (参数列表)= 0;
当类中有了纯虚函数,这个类也被称为抽象类
抽象类特点:
-无法实例化对象
-子类必须重写抽象类中的纯虚函数,否则也属于抽象类
制作饮品的大致流程:煮水-冲泡-倒入杯中-加入辅料
在多态中,如果子类有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码
解决方法:将父类中的析构函数改成虚函数或者纯虚函数
虚析构和纯虚析构的共性:
-可以解决父类指针释放子类对象
-都需要有具体的函数实现
虚析构和纯虚析构的区别:
-如果是纯虚析构,该类属于抽象类,无法实例化对象
虚析构语法:virtual ~类名(){}
纯虚析构语法: virtual ~类名() = 0;
如果子类对象没有堆区数据,可以不写为虚析构或者纯虚析构
电脑主要组成部件为cpu(用于计算)、显卡(用于显示)、内存条(用于存储)
将每个零件封装成抽象类,并且提供不同的厂商提供不同的零件,例如inter厂商和lenovo 厂商
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
测试时组装三台不同的电脑进行工作