/*多态基本案例*/
#include<iostream>
using namespace std;
class Animal
{
public:
virtual void speak() //添加virtual关键字,得以区分父类,基类相同函数名的调用
{
cout<<"动物在说话"<<endl;
}
};
/*下面两个继承父类Animal,并且函数名相同*/
class Cat:public Animal
{
public:
void speak() //子类函数重写
{
cout << "小猫在说话" << endl;
}
};
class Dog:public Animal
{
public:
void speak() //子类函数重写
{
cout << "小狗在说话" << endl;
}
};
//测试调用函数
void test_speak(Animal &animal)
{
animal.speak();
}
int main()
{
/*如果不在基类函数中添加virtual关键字,则三个类中相同的函数名,
无法调用子类的重写函数->动态绑定,运行时确定函数(子类,父类)地址.
*/
Cat cat;
Dog dog;
test_speak(cat);
test_speak(dog);
}