weixin_70701961 2022-11-29 10:51 采纳率: 62.5%
浏览 153
已结题

定义一个类Animal,该类可以存放动物名字,并且有成员函数Identify()用于显示动物名字(输出: I am an animal:动物名字)

根据以下要求,完成编程。
1)定义一个类Animal,该类可以存放动物名字,并且有成员函数Identify()用于显示动物名字(输出: I am an animal:动物名字)
2)定义两个类Cat、Dog,都继承自Animal,并且都重载了Identify(),显示动物种类和名字(分别输出:I am a cat:动物名字; I am a dog:动物名字)
3)定义类Tiger,继承自类Cat,重载Identify(),显示输出:I am a tiger: 动物名字
4)定义一个动物园类Zoo,根据以下的提示编写动物类。注意指针指向虚函数的用法。

class Zoo
{
public:
    Zoo(int max);                    //max为动物园最多能圈养动物数
    ~Zoo(){ delete residents; } 
    void Accept(Animal *d);         //接受动物
    void ListAnimal();              //显示动物园所有的动物
private:
    int max_animals;               //动物园能圈养的动物数
    int num_animals;               //动物园动物园当前圈养的动物数
    Animal **residents;            //指向动物园圈养的动物对象的指针数组
};

编程要求:创建三个对象Cat类对象 cat("汤姆猫")、Dog类对象dog("汪汪狗")、Tiger类对象tiger("贝乐虎"),先显示各自类的Identify()。再创建Zoo类对象shanghai, 将三只动物依次圈养到shanghai动物园,并依次输出当前圈养的动物信息。

  • 写回答

1条回答 默认 最新

  • 爱看书的小沐 2022-11-29 19:04
    关注

    试试。

    
    #include <iostream>
    using namespace std;
    
    class Animal
    {
    public:
        Animal(std::string name_) {
            name = name_;
        };
        virtual ~Animal() {
            cout << "delete animal:" << name.c_str() << endl;
        }
    
        virtual void Identify() {
            cout << "I am an animal:" << name.c_str() << endl;
        }
    
    protected:
        std::string name;
    };
    
    class Cat : public Animal
    {
    public:
        Cat(std::string name_)
            : Animal(name_) {
        }
    
        virtual ~Cat() {
            cout << "delete cat:" << name.c_str() << endl;
        }
    
        virtual void Identify() {
            cout << "I am an cat:" << name.c_str() << endl;
        }
    
    };
    
    class Dog : public Animal
    {
    public:
        Dog(std::string name_)
            : Animal(name_) {
        }
    
        virtual ~Dog() {
            cout << "delete dog:" << name.c_str() << endl;
        }
    
        virtual void Identify() {
            cout << "I am an dog:" << name.c_str() << endl;
        }
    
    };
    
    class Tiger : public Cat
    {
    public:
        Tiger(std::string name_)
            : Cat(name_) {
        }
    
        virtual ~Tiger() {
            cout << "delete tiger:" << name.c_str() << endl;
        }
    
        virtual void Identify() {
            cout << "I am an tiger:" << name.c_str() << endl;
        }
    };
    
    class Zoo
    {
    public:
        Zoo(int max);                    //max为动物园最多能圈养动物数
        ~Zoo() { delete residents; }
        void Accept(Animal *d);         //接受动物
        void ListAnimal();              //显示动物园所有的动物
    private:
        int max_animals;               //动物园能圈养的动物数
        int num_animals;               //动物园动物园当前圈养的动物数
        Animal **residents;            //指向动物园圈养的动物对象的指针数组
    };
    
    Zoo::Zoo(int max)
    {
        num_animals = 0;
        max_animals = max;
        residents = new Animal*[max_animals];
    }
    
    void Zoo::Accept(Animal *d)
    {
        if (num_animals >= max_animals) {
            cout << "动物园已满,无法继续圈养额外的动物!" << endl;
            return;
        }
    
        residents[num_animals] = d;
        num_animals++;
    }
    
    void Zoo::ListAnimal()
    {
        for (int i = 0; i < num_animals; i++) {
            Animal* d = residents[i];
            d->Identify();
        }
    }
    
    int main()
    {
        Animal* cat = new Cat("汤姆猫");
        Animal* dog = new Dog("汪汪狗");
        Animal* tiger = new Tiger("贝乐虎");
    
        Zoo* shanghai = new Zoo(3);
        
        shanghai->Accept(cat);
        shanghai->Accept(dog);
        shanghai->Accept(tiger);
        
        shanghai->ListAnimal();
        
        delete shanghai;
        delete cat;
        delete dog;
        delete tiger;
    
        std::cout << "Hello Zoo!\n";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振