1、函数覆盖
函数覆盖也被称为函数重写,类似于函数隐藏, 函数覆盖是多态的前提条件之一。
函数覆盖与函数隐藏的区别:
● 基类的被覆盖函数需要使用virtual关键字修饰,表示这个函数是一个虚函数
在Qt Creator中虚函数是斜体
虚函数的特点如下:
1、 虚函数具有传递性,当基类的某个成员函数为虚函数,派生类中的新覆盖函数(函数名称相同、参数列表相同、返回值类相关)也自动称为虚函数。
2、只有非静态成员函数可以设置为虚函数
3、如果函数声明定义分离,只需要在声明处使用virtual关键字
4、构造函数不能设置为虚函数,但是析构函数可以
2、多态的基本使用
多态是面向对象的三大特性之一,即“一个接口,多种状态”体现的是功能扩展的思想,程序在运行时根据类型的不同自动选择不同的决策方式。多态主要用于接口的设计。
多态的使用条件:
● 基类与派生类之间使用公有继承
● 基类与派生类之间要有函数覆盖
● 基类引用/指针指向派生类对象
3、虚析构函数
当基类指针或引用指向派生类对象时,对象销毁时可能会导致派生类的析构函数无法被调用,造成内存泄漏。
解决方案是: 将基类的析构函数设置虚函数。
建议一个类只要有作为基类的可能,就把其析构函数设置为虚析构函数。
4、抽象类 abstract
抽象类
1、抽象类只能作为基类,不能初始化对象
2、抽象类一定有纯虚函数,有纯虚函数的类一定是抽象类
纯虚函数是一个特殊的虚函数,没有函数体 语法: virtual void 函数名() = 0 ;
3、抽象类是给派生类提供算法框架。
//注意:1、派生类没有实现所有抽象基类的纯虚函数,这样的派生类也是一个抽象类。
//2、抽象类一定会作为其他类的基类,其析构函数必须设置为虚函数,因此抽象类可以支持多态。