多态分为两类:兄弟们!!!
1、静态多态:函数重载和运算符重载属于静态多态实质就是复用函数名
2、动态多态:派生类和虚函数实现运行时多态
区别:
1、静态多态的函数地址早绑定–编译阶段确定函数地址
2、动态多态的函数地址晚绑定–运行阶段确定函数地址
动态多态满足条件:
1、有继承关系
2、子类重写基类虚函数,何为重写:函数返回值、函数名、形参都相同
3、子类重写时,关键字virtual 可写可不写
动态多态的使用:
基类的指针或引用指向子类对象
多态的优点
1、代码组织清晰
2、可读性强
3、利于前期和后期的扩展和维护
#include <iostream>
using namespace std;
class Animal
{
public:
//virtual 虚函数实现函数地址运行时绑定
virtual void speak()
{
cout<<"动物在说话"<<endl;
}
};
class Cat : public Animal{
public:
void speak()
{
cout<<"猫在说话"<<endl;
}
};
void doSpeak(Animal & animal)
{
animal.speak();
}
void test01()
{
Cat cat;
doSpeak(cat);
}
int main() {
test01();
}