多态按字面的意思就是多种形态,相同的方法调用,但是有不同的实现方式。多态性可以简单地概括为“一个接口,多种方法,实现接口与实现的分离。
C++有两种多态形式:
- 静态多态
- 动态多态
而本文主要介绍动态多态的应用。
动态多态(动态绑定):即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。
通过一个例子辅助讲解
//动物类
class Animal{
public:
virtual void Eat(){ // 使用virtual关键字来修饰函数,使得函数变为虚函数
cout << "动物吃东西" << endl;
}
};
//猫类
class Cat:public Animal{
public:
// 子类重写父类中的虚函数
void Eat(){
cout << "猫吃鱼" << endl;
}
};
// 测试函数
void test01(Animal &animal){ // Animal &aniaml = cat 这行代码满足下面动态多态的使用条件
animal.Eat();
}
// 主函数
int main(){
Cat cat;
test01(cat);
return 0;
}
上面的代码就是在使用动态多态
动态多态的满足条件:
1.有继承函数
2.子类重写父类中的的虚函数
动态多态的使用:
父类指针或引用执行子类对象
现在通过图画来剖析代码
下面是更直观的描述:
如果没有动态多态的话,Cat会一直指向Animal的空间,也就是在调用test01(cat)的时候调用的并不是cat中的Eat函数,而是父类Animal中的Eat函数。
好了,就分享到这了。希望对你有帮助。