静态多态:函数重载和运算符重载属于静态多态,复用函数名。函数地址早绑定——编译阶段确定函数地址。
动态多态:派生类和虚函数实现运行时多态。函数地址晚绑定——运行阶段确定函数地址。
class Animal
{
public:
//虚函数,地址晚绑定
virtual void speak()
{
cout << "动物说话" << endl;
}
};
class Cat :public Animal
{
public:
void speak()
{
cout << "cat说话" << endl;
}
};
//地址早绑定,动物说话
//如果想猫说话,就要地址晚绑定
void dospeak(Animal& animal)
{
animal.speak();
}
void test()
{
Cat cat;
dospeak(cat);
}
动态多态满足条件:
1,有继承关系
2,子类重写父类的虚函数
纯虚函数和抽象类
纯虚函数语法:
virtual 返回值类型 函数名 (参数列表) = 0;
当类中有了纯虚函数,这个类也称为抽象类。
抽象类特点:无法实例化对象。子类必须重写抽象类中的纯虚函数,否则也属于抽象类
多态应用示例:
#include<iostream>
#include<string>