5.6
虚函数:解决向上转型的完整性,可以通过基类的指针调用派生类的方法;
虚函数实现前提:函数的覆盖/遮蔽;
工程意义:实现了多态(使用同一个实例,调用同一个接口产生不同的效果/使用同一接口,传递不同的实例,执行不同的操作)
多态的作用:提高代码的扩展性(新增新的功能时,不修改之前的代码,只增加新的代码)
实现多态的前提:1、继承(覆盖/函数遮蔽),2、虚函数,3、用基类的指针指向子对象
函数重载也是一种多态;
用一个基类对象接受子类对象无法发生多态;只有基类指针接收子类对象的地址或者指针,才会发生多态;
纯虚函数—抽象类:一个类里如果有纯虚函数,那么这个类就是抽象类;
特点:不能实例化;<继承抽象类的子类“必须”实现父类纯虚函数>
抽象类作用:充当功能接口或者类接口;
C++向上转型:子类对象赋值给基类对象,子类对象的指针赋值基类的对象指针(必须有多态)
Dynamic_cast:如果转换失败返回nullptr;
子类转换为父类:向上转型,使用dynamic_cast<type_id>(expression),这种转换相对来说比较安全不会有数据的丢失;
父类转换为子类:向下转型,可以使用强制转换,这种转换时不安全的,会导致数据的丢失,原因是父类的指针或者引用的内存中可能不包含子类的成员的内存。