多态分为静态多态和动态多态;
静态多态:函数重载、运算符重载,函数的地址在编译阶段就绑定了。
动态多态:派生类和虚函数实现运行时多态,函数的地址运行时绑定。
动态动态满足条件:1、有继承关系
2、派生类重写(函数名、返回值类型、参数列表完全相同)基类虚函数
动态多态的使用:基类的指针或者引用指向派生类的对象
动态多态原理:在类中声明一个虚函数时,会有一个vfptr(虚函数(表)指针),会被派生类所继承,这个指针指向vftable(虚函数表),虚函数表中保存虚函数的地址。使用基类的指针或者引用指向派生类对象时,派生类的虚函数表会覆盖掉基类的虚函数表(前提是派生类重写虚函数),执行派生类的虚函数,因为实际上使用的是派生类的对象。程序运行时,基类指针或者引用指向不同派生类对象,调用同一个接口会呈现不同的效果,这就是动态多态。