虚函数与多态性

5.1多态性概述:

虚函数与多态性_第1张图片

 按实施的机制,多态可以分为两类:

虚函数与多态性_第2张图片

 虚函数与多态性_第3张图片

 虚函数的定义:

(前面思维是虚基类,别搞混了)

虚函数与多态性_第4张图片

 运行时多态的条件:

虚函数与多态性_第5张图片

 运行时的多态:

虚函数与多态性_第6张图片

 基类中有show(),派生类中也有show()。都定义为虚函数

运行时才知道s4指向c, c 时circle类型的,所以才会调用circle中的show()

运行时多态

虚函数与多态性_第7张图片

 5.2虚析构函数:

虚函数与多态性_第8张图片

 虚的析构函数

虚函数与多态性_第9张图片

 虚函数与多态性_第10张图片

 虚函数与多态性_第11张图片

 没有释放继承类申请的空间

pb是base 的指针,所以delete pb时只会释放基类的空间。

解决方法:

将两个析构函数都定义为虚的。

虚函数与多态性_第12张图片

 虚函数与多态性_第13张图片

 派生类的空间被释放。

虚函数与多态性_第14张图片

 5.3纯虚函数和抽象类

在基类中定义的area()函数,只是为了后面提供一个统一的接口,实现多态

不需要有函数体。

虚函数与多态性_第15张图片

 当调用getArea()时,根据传进去的参数,多态的选择调用那个类中的area()。

 虚函数与多态性_第16张图片

 派生类定义后,才能进行调用,有纯虚函数的类称为抽象类,抽象类不能实例化对象

虚函数与多态性_第17张图片

 

虚函数与多态性_第18张图片

 

你可能感兴趣的:(C++,c++,开发语言)