文章目录
一、多态
多态出现的条件:
- 继承关系
- 子类中重写父类的
虚函数
- 父类指针或者引用指向子类对象
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;
}