一、多态有静态多态和动态多态:
1、静态多态:函数重载和运算符重载属于静态多态,复用函数名
2、动态多态:派生类和虚函数实现运行时多态
二、静态多态和动态多态的区别
1、静态多态函数地址早绑定:在编译阶段确定函数地址
2、动态多态的函数地址晚绑定:运行阶段确定函数地址
三、动态多态满足条件
1、有继承关系
2、子类重写父类虚函数
四、动态多态的使用
父类的指针或者引用 执行子类对象
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; class Animal { public: virtual void speak() { printf("Animal is Speaking\n"); } }; class dog : public Animal { public: virtual void speak() //这里的virtual可写可不写 { printf("dog is Speaking\n"); } }; class cat : public Animal { public: virtual void speak() //这里的virtual可写可不写 { printf("cat is Speaking\n"); } }; void test1(Animal &a) { a.speak(); } void test2(Animal *a) { a->speak(); } int main() { dog g; cat t; test1(t); dog * ptr = &g; test2(ptr); return 0; }