多态
廖家龙 用心听,不照做

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

多态分为两类:
1)静态多态:函数重载和运算符重载属于静态多态,复用函数名
2)动态多态:派生类和虚函数实现运行时多态

静态多态和动态多态的区别:
1)静态多态的函数地址早绑定,编译阶段确定函数地址
2)动态多态的函数地址晚绑定,运行阶段确定函数地址

多态的底层原理:

分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类:

多态的优点:代码组织结构清晰、可读性强、利于前期和后期的扩展以及维护

纯虚函数和抽象类:在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数,当类中有了纯虚函数,这个类也称为抽象类

抽象类特点:
1)无法实例化对象
2)子类必须重写抽象类中的纯虚函数,否则也属于抽象类

虚析构和纯虚析构:

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

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

虚析构和纯虚析构共性:
1)可以解决父类指针释放子类对象
2)都需要有具体的函数实现

虚析构和纯虚析构的区别:如果是纯虚析构,该类属于抽象类,无法实例化对象