场景假设:
一个主人养了猫和狗,猫和狗都有自己爱吃的东西,主人在喂它们的时候,如果既要判断是猫还是狗,再判断他们分别爱吃什么,就显得很麻烦。如果主人养了很多种动物,这样的重复判断,就会浪费很多时间。有什么办法,能让主人拿到一种食物就知道这是哪种动物的,就好了。
C++ 通过类的继承和类的组合来实现这一需求。
具体代码:
#include <iostream>
using namespace std;
class Animal{
public:
Animal(){}
~Animal(){}
public:
virtual void cry(){
cout << "我不知道怎么叫" << endl;
}
virtual void eat(){
cout << "我不知道吃什么" << endl;
}
};
class Dog: public Animal{
public:
void cry(){
cout << "旺旺" << endl;
}
void eat(){
cout << "我是狗狗, 我最爱吃大骨头啦!!!" << endl;
}
};
class Cat: public Animal{
public:
void cry(){
cout << "喵喵" << endl;
}
void eat(){
cout << "我是猫猫,我爱吃鱼" << endl;
}
};
class Food{
public:
virtual void showName(){
cout << "食物:未知" << endl;
}
};
class Fish: public Food{
public:
void showName(){
cout << "食物:鱼" << endl;
}
};
class Bone: public Food{
public:
void showName(){
cout << "食物:大骨头" << endl;
}
};
//统一接口feed(方便基类管理所有的派生类对象)
void feed(Animal *animal[], Food *food[], int n)
{
for(int i = 0; i < n; i++){
animal[i]->cry(); //叫
animal[i]->eat(); //吃
food[i]->showName(); //食物
}
}
int main()
{
//实例化出 狗 猫 骨头 鱼
Dog dog;
Bone bone;
Cat cat;
Fish fish;
//用基类的指针数组来放派生类对象的地址,便于基类对派生类的管理。
Animal *animal[] = {&dog, &cat};
Food *food[] = {&bone, &fish};
//调用feed方法
feed(animal, food, 2);
return 0;
}