多态:当不同的对象去完成同一件事时会产生出不同的状态。
多态分为静态多态和动态多态,这里讲的是动态多态。
即动态多态的函数地址晚绑定,运行阶段确定函数地址。
多态示例:
#include//动态多态满足条件 //1、有继承关系 //2、子类重写父类的虚函数 //动态多态的使用 //父类的指针或者引用 指向子类对象 //Animal &animal =cat //*原理 using namespace std; class Animal { public: virtual void speak(){ cout<<"动物在说话"<
多态原理:
由于用了虚函数,使得类的内部发生了改变,多了一个虚函数指针
vfptr 即 virtual function pointer 虚函数指针(指针四个字节)
虚函数指针指向虚函数表vftable 表内部记录虚函数的地址
当子类没有重写虚函数时,子类把父类继承,vftable中记录的是还是父类的函数
当子类重写父类的虚函数,子类中的虚函数表内部会替换成 子类的虚函数地址
当父类的指针或者引用指向子类对象的时候,发生多态
多态作为C++面向对象三大特性之一
多态的优点:
代码组织结构清晰
可读性强
利于前期和后期的扩展以及维护,如果想扩展新的功能,不需要修改源码。
在真实开发中,对扩展进行开放,对修改进行关闭
参考:黑马程序员和C++ primer



