目录
多态简介
多态分为两类
1.静态多态:函数重载和运算符重载属于静态多态,赋予用函数名
2.动态多态:派生类和虚函数实现运行时多态
静态函数和动态多态区别
1.静态多态的函数地址早绑定-编译阶段确定函数地址
2.动态多态的函数地址晚绑定-运行阶段确定函数地址
动态多态
满足条件:
1.有继承关系
2.子类重写父类中的虚函数
使用条件:
父类指针或引用指向子类对象
#include<iostream>
using namespace std;
class Animal {
public:
virtual void speak() {
cout << "动物在说话" << endl;
}
};
class Cat :public Animal {
public:
void speak() {
cout << "小猫在说话" << endl;
}
};
class Dog :public Animal {
public:
void speak() {
cout << "小狗在说话" << endl;
}
};
void Dospeak(Animal& animal) {
animal.speak();
}
int main()
{
Cat cat;
Dog dog;
Dospeak(cat);
Dospeak(dog);
return 0;
}
纯虚函数和抽象类
由于在多态中通常父类中的虚函数的实现是毫无意义的,主要调用子类重写的内容
因此可以将虚函数改为纯虚函数
语法:virtual 返回值类型 函数名(参数列表)=0;
有纯虚函数的类也被称为抽象类
抽象类特点:
1.无法实例化对象
2.子类必须重写抽象类中的纯虚函数,否则属于抽象类