C++动物园(虚函数与多态)

题目描述
某个动物园内,有老虎、狗、鸭子和猪等动物,动物园的管理员为每个动物都起了一个名字,并且每个动物都有年龄、体重等信息。每到喂食的时候,不同的动物都会叫唤(speak)。
每种动物的叫唤声均不同,老虎的叫唤声是“AOOO”,狗的叫唤声是“WangWang”,鸭子的叫唤声是“GAGA”,猪的叫唤声是“HENGHENG”。

定义一个Animal的基类,Animal类有函数Speak(),并派生老虎、狗、鸭子和猪类,其能发出不同的叫唤声(用文本信息输出叫声)。

编写程序,输入动物名称、名字、年龄,让动物园内的各种动物叫唤。

要求:只使用一个基类指针,指向生成的对象并调用方法。

输入
测试案例的个数

第一种动物的名称 名字 年龄

第二种动物的名称 名字 年龄

输出
输出相应动物的信息

如果不存在该种动物,输出There is no 动物名称 in our Zoo. ,具体输出参考样例输出

样例输入
4
Tiger Jumpjump 10
Pig Piglet 4
Rabbit labi 3
Duck tanglaoya 8
样例输出
Hello,I am Jumpjump,AOOO.
Hello,I am Piglet,HENGHENG.
There is no Rabbit in our Zoo.
Hello,I am tanglaoya,GAGA.

#include<iostream>
#include <cstring>
using namespace std;
class  Animal{
	protected:
		char *name;
		int  age;
	public:
		Animal(char* n,int a){
			name=new char[strlen(n)+1];
			strcpy(name,n);
			age=a;
		}
		virtual void speak(){};
		virtual ~Animal(){
			if(name!=NULL)
				delete name;
		}
		
};
class Tiger:public Animal{
	public:
		Tiger(char *n,int a):Animal(n,a){	}
		virtual void speak(){
			cout<<"Hello,I am "<<name<<",AOOO."<<endl;
		}
};
class Dog:public Animal{
	public:
		Dog(char *n,int a):Animal(n,a){	}
		virtual void speak(){
			cout<<"Hello,I am "<<name<<",WangWang."<<endl;
		}
};
class Duck:public Animal{
	public:
		Duck(char *n,int a):Animal(n,a){	}
		virtual void speak(){
			cout<<"Hello,I am "<<name<<",GAGA."<<endl;
		}
};
class Pig:public Animal{
	public:
		Pig(char *n,int a):Animal(n,a){	}
		virtual void speak(){
			cout<<"Hello,I am "<<name<<",HENGHENG."<<endl;
		}
};
int main(){
	char animal[20],name[20];
	int age,t,i;
	Animal *a1;
	cin>>t;
	while(t--){
		i=0;
		cin>>animal>>name>>age;
		if(!strcmp(animal,"Tiger")){
			i=1;
			Tiger t1(name,age);
			a1=&t1;
			a1->speak();
		}
		if(!strcmp(animal,"Dog")){
			i=1;
			Dog d1(name,age);
			a1=&d1;
			a1->speak();
		}
		if(!strcmp(animal,"Duck")){
			i=1;
			Duck d1(name,age);
			a1=&d1;
			a1->speak();
		}
		if(!strcmp(animal,"Pig")){
			i=1;
			Pig p1(name,age);
			a1=&p1;
			a1->speak();
		}
		if(i==0){
			cout<<"There is no "<<animal<<" in our Zoo."<<endl;
		}
	}
	return 0;
}

比较字符串的函数strcmp

加前缀#include <cstring>

strcmp(str1,str2);

比较字符串str1和str2的大小,如果str1小于str2,返回值就<0,反之如果str1大于str2,返回值就>0,如果str1等于str2,返回值就=0.
如果和某一个具体的字符串比较需要加双引号,如本题的

strcmp(animal,"Tiger")

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值