天天看点

C++类和对象--多态

多态是c++面向对象三大特性之一

多态的优点:

代码组织结构清晰

可读性强

利于前期以及后期的扩展以及维护

多态分为两类:

静态多态:函数重载和运算符重载属于静态多态,复用函数名

动态多态:派生类和虚函数实现运行时多态

静态多态和动态多态的区别:

静态多态的函数地址早绑定 - 编译阶段确定函数地址

动态多态的函数地址晚绑定 - 运行阶段确定函数地址

C++类和对象--多态

动态多态后的animal类:

C++类和对象--多态

动态多态后的cat类:

C++类和对象--多态

tips:怎么查看底层类结构的方法在上篇博客有写

1、普通写法

缺点:如果想扩展新的功能,需要修改源码

在真实开发中,提倡“开闭原则”,即:对扩展进行开放,对修改进行关闭

2、利用多态

在多态中,通常父类虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数

纯虚函数语法: virtual  返回值类型  函数名  (参数列表)=  0;

当类中有了纯虚函数,这个类也被称为抽象类

抽象类特点:

-无法实例化对象

-子类必须重写抽象类中的纯虚函数,否则也属于抽象类

制作饮品的大致流程:煮水-冲泡-倒入杯中-加入辅料

在多态中,如果子类有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

解决方法:将父类中的析构函数改成虚函数或者纯虚函数

虚析构和纯虚析构的共性:

-可以解决父类指针释放子类对象

-都需要有具体的函数实现

虚析构和纯虚析构的区别:

-如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法:virtual  ~类名(){}

纯虚析构语法: virtual ~类名() = 0;

如果子类对象没有堆区数据,可以不写为虚析构或者纯虚析构

电脑主要组成部件为cpu(用于计算)、显卡(用于显示)、内存条(用于存储)

将每个零件封装成抽象类,并且提供不同的厂商提供不同的零件,例如inter厂商和lenovo 厂商

创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口

测试时组装三台不同的电脑进行工作

c++

继续阅读