【id:248】【20分】A. 动物园(虚函数与多态)
时间限制
1s
内存限制
128MB
题目描述
某个动物园内,有老虎、狗、鸭子和猪等动物,动物园的管理员为每个动物都起了一个名字,并且每个动物都有年龄、体重等信息。每到喂食的时候,不同的动物都会叫唤(speak)。每种动物的叫唤声均不同,老虎的叫唤声是“AOOO”,狗的叫唤声是“WangWang”,鸭子的叫唤声是“GAGA”,猪的叫唤声是“HENGHENG”。
定义一个Animal的基类,Animal类有函数Speak(),并派生老虎(Tiger)、狗(Dog)、鸭子(Duck)和猪(Pig)类,其能发出不同的叫唤声(用文本信息输出叫声)。
编写程序,输入动物名称、名字、年龄,让动物园内的各种动物叫唤。
要求:只使用一个基类指针,指向生成的对象并调用方法。
输入
测试案例的个数
第一种动物的名称 名字 年龄
第二种动物的名称 名字 年龄
......
输出
输出相应动物的信息
如果不存在该种动物,输出There is no 动物名称 in our Zoo. ,具体输出参考样例输出
样例查看模式
正常显示
查看格式
输入样例1 <-复制
4
Tiger Jumpjump 10
Pig Piglet 4
Rabbit labi 3
Duck tanglaoya 8
输出样例1
Hello,I am Jumpjump,AOOO.
Hello,I am Piglet,HENGHENG.
There is no Rabbit in our Zoo.
Hello,I am tanglaoya,GAGA.
Template when using upward transformation
Animal *animal;
animal = new Tiger(name, age);
#include "iostream"
#include "vector"
using namespace std;
// 定义一个 Animal 的基类,Animal类有函数Speak(),并派生老虎(Tiger)、狗(Dog)、鸭子(Duck)和猪(Pig)类,其能发出不同的叫唤声(用文本信息输出叫声)。
class Animal {
public:
//都起了一个名字,并且每个动物都有年龄、体重等信息
string name;
int age;
int weight;
Animal( string &name, int age, int weight) : name(name), age(age), weight(weight) {}
virtual void Speak() {
cout << "";
}
};
class Tiger : virtual public Animal {
public:
Tiger( string &name, int age) : Animal(name, age, 0) {}
virtual void Speak() override {
cout << "Hello,I am " << name << ",";
cout << "AOOO";
cout << "." << endl;
}
};
class Dog : virtual public Animal {
public:
Dog( string &name, int age) : Animal(name, age, 0) {}
virtual void Speak() override {
cout << "Hello,I am " << name << ",";
cout << "WangWang";
cout << "." << endl;
}
};
class Duck : virtual public Animal {
public:
Duck( string &name, int age) : Animal(name, age, 0) {}
virtual void Speak() override {
cout << "Hello,I am " << name << ",";
cout << "GAGA";
cout << "." << endl;
}
};
class Pig : virtual public Animal {
public:
Pig( string &name, int age) : Animal(name, age, 0) {}
virtual void Speak() {
cout << "Hello,I am " << name << ",";
cout << "HENGHENG";
cout << "." << endl;
}
};
int main() {
int times;
cin >> times;
// 主要的代码 加*
Animal *animal;
while (times--) {
string type;
string name;
int age;
cin >> type >> name >> age;
if (type == "Tiger") {
animal = new Tiger(name, age);
animal->Speak();
} else if (type == "Pig") {
animal = new Pig(name, age);
animal->Speak();
} else if (type == "Duck") {
animal = new Duck(name, age);
animal->Speak();
} else if (type == "Dog") {
animal = new Dog(name, age);
animal->Speak();
} else {
cout << "There is no " << type << " in our Zoo." << endl;
}
}
}