Zoo (virtual functions and polymorphism)

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

    }
}

Guess you like

Origin blog.csdn.net/m0_62288512/article/details/131580370