多态:由父类指针统一操作子类对象
多态优点:由父类指针管理子类,可以照顾到未来代码(维护)。比如说添加一个新的子类,只需要重写函数,不必修改源代码
虚函数 :父类指针、引用调用正确的被覆盖的函数,此时成员函数需要声明成虚函数
注意:如果父类中的成员函数是虚函数,那么子类中重写这个函数默认为虚函数
父类指针、引用调用函数:1、查看基类中函数是否为虚函数2、不是的话调用父类成员函数,是的话查看指向,调用对应的对象
虚析构函数:如果有继承,父类中的析构函数必须是虚析构函数 (否则会造成内存泄漏)手动delete时用到
多态的影响:
1⃣️增加内存(类中有虚函数,每个对象默认增加一个指针->虚指针)
2⃣️减慢程序运行的速度(虚指针指向虚函数表,通过遍历虚表,寻址找到调用的对应函数)
抽象基类和纯虚函数:
抽象基类作用:用做接口,给子类提供成员变量、成员函数
纯虚函数:一个函数=0,没有函数体。
抽象基类:如果一个类包含纯虚函数,那么这个类就是一个抽象类,抽象类不能创建对象只能当做基类使用,所以也叫作抽象基类
注意:1、抽象基类不能创建对象(纯虚函数的存在)
2、子类中必须实现继承自抽象基类中的纯虚函数,如果子类不能实现纯虚函数,那么子类也将成为一个抽象类
3、函数参数可以是抽象类的引用、指针,形参不能传值的形式。
4、函数返回值可以是抽象类的引用、指针,不能是值返回形式
virtual:根据指向 父类指针、引用指向之后调用对应的版本函数
virtual析构函数:父类析构函数必须是虚析构
多态的代价:1、内存 2、运行速度
抽象基类和纯虚函数