要出现多态,就需要创建两个有继承关系的类,这里我创建了一个Animal类和它的子类Cat类
且在子类还要重写父类中的虚函数
代码中即为 在Cat类中重写了Animal类中的 virtual void speak();
(重写函数:返回类型函数名都一样,仅仅函数体不同)
这样就满足了多态的条件
#include<iostream>
using namespace std;
class Animal
{
public:
virtual void speak()
{
cout << "动物在说话" << endl;
}
};
class Cat :public Animal
{
public:
void speak()
{
cout << "小猫在说话" << endl;
}
};
class Dog :public Animal
{
public:
void speak()
{
cout << "小狗在说话" << endl;
}
};
void doSpeak(Animal& animal)
{
animal.speak();
}
void test01()
{
Cat cat;
doSpeak(cat);
Dog dog;
}
int main()
{
test01();
return 0;
}
若要使用多态,还需要 用父类的指针或者引用 指向子类对象
在代码中即为doSpeak()函数的参数中 Animal& animal;
在 test01()中将 Cat的对象cat传入了doSpeak()中
即Animal &animal=cat;
即是父类的引用 指向子类对象
这样
当Animal&animal=cat;时就会调用cat的speak函数
当Animal&animal=dog;时就会调用dog的speak函数
这样就实现了doSpeak()函数的多态了
总结:
动态多态的满足条件
1.有继承关系
2.子类重写父类的虚函数(重写:返回类型函数名都一样,函数体不同)
3.有父类的指针或者引用 指向子类对象