C++,虚函数及多态实例

场景假设:

一个主人养了猫和狗,猫和狗都有自己爱吃的东西,主人在喂它们的时候,如果既要判断是猫还是狗,再判断他们分别爱吃什么,就显得很麻烦。如果主人养了很多种动物,这样的重复判断,就会浪费很多时间。有什么办法,能让主人拿到一种食物就知道这是哪种动物的,就好了。

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值