多态的基本概念
多态是C++面向对象三大特性之一
多态分为两类
- 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名
- 动态多态: 派生类和虚函数实现运行时多态
静态多态和动态多态区别:
- 静态多态的函数地址早绑定 - 编译阶段确定函数地址
- 动态多态的函数地址晚绑定 - 运行阶段确定函数地址
此时不论传什么,都会调用父类#include <iostream>#include <string>using namespace std;class Animal {public:void func() {cout << "动物在叫" << endl;}};class Cat : public Animal {public:void func() {cout << "喵喵喵" << endl;}};class Dog : public Animal {public:void func() {cout << "汪汪汪" << endl;}};void DoSpeak(Animal& animal){animal.func();}void example() {Cat cat;DoSpeak(cat);}int main() {example();return 0;}
加上Virtual后,则变为想要的结果。#include <iostream>#include <string>using namespace std;class Animal {public:virtual void func() {cout << "动物在叫" << endl;}};class Cat : public Animal {public:void func() {cout << "喵喵喵" << endl;}};class Dog : public Animal {public:void func() {cout << "汪汪汪" << endl;}};void DoSpeak(Animal& animal){animal.func();}void example() {Cat cat;DoSpeak(cat);}int main() {example();return 0;}
