多态是C++面向对象三大特性之一

省流:

  1. 多态满足条件
    • 有继承关系
    • 子类重写父类中的虚函数
  2. 多态使用条件
    • 父类指针或引用指向子类对象

*重写:函数返回值类型 函数名 参数列表 完全一致称为重写


分类 & 区别

静态多态

  • 函数重载 和 运算符重载属于静态多态,复用函数名
  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址

动态多态

  • 派生类 和 虚函数实现运行时多态
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;

class Animal {
public:
virtual void speak() { //虚函数
cout << "动物在说话" << endl;
}
};

class Cat :public Animal {
public:
virtual void speak() { //virtual可写可不写
cout << "小猫在说话" << endl;
}
};

class Dog :public Animal {
public:
void speak() {
cout << "小狗在说话" << endl;
}
};

void doSpeak(Animal &a) {
a.speak();
}

int main() {
Cat c;
doSpeak(c);
Dog d;
doSpeak(d);
return 0;
}