一、多态
多态出现的条件:
- 继承关系
- 子类中重写父类的
虚函数
- 父类指针或者引用指向子类对象
1.1 多态的实现原理
1、父类成员函数中包含虚函数,虚函数会在会在父类中留下一个虚函数指针,指向父类虚函数。
2、发生继承时,子类也同样会继承下这个指针,当子类中重写这个虚函数时:子类的函数地址会覆盖掉继承下来的虚函数地址。
3、函数调用时就会根据对象类的不同来调用对应的函数。
1.2 代码示例
//多态 //运行阶段确定函数地址 //多态发生的条件:继承关系 && 子类中重写父类的虚函数 && 父类指针或者引用指向子类对象 class Animal { public: //父类中声明虚函数 virtual void stream() { cout << "The animal is streaming "; } }; class Cat : public Animal { public: //子类中重写了父类中的stream()函数,不能事先确定调用哪个函数。 void stream() { cout << "The cat is streaming "; } }; void doStream(Animal& animal) { animal.stream(); } int main() { Animal a; Cat cat; doStream(a); doStream(cat); return 0; }