用C++编写相关程序9

请编写程序,上机调试,题目如下图,请按题目要求编写,并给出程序

img

img

程序完成了一半现在的问题是不知道如何调用show Animals()来输出这些动物对象的信息,以及如何用主函数去统计具有相同科目的动物数量


```c++
#include 
using namespace std;
#include <string>

class Animal
{
protected:
    string nameID;
    string order;
    string family;
    string genus;
public:
    Animal() {}
    Animal(string n, string o, string f, string g) : nameID(n), order(o), family(f), genus(g) {}
    virtual void who() { cout << nameID << endl; }
    virtual void sound() = 0;
};

class Sheep : public Animal
{
public:
    Sheep(string n, string o, string f, string g) : Animal(n, o, f, g) {}
    virtual void who() { cout << "Sheep!" << endl; }
    virtual void sound() { cout << "miemie!" << endl; }
};

class Dog : public Animal
{
public:
    Dog(string n, string o, string f, string g) : Animal(n, o, f, g) {}
    virtual void who() { cout << "Dog!" << endl; }
    virtual void sound() { cout << "wangwang!" << endl; }
};

class Cow : public Animal
{
public:
    Cow(string n, string o, string f, string g) : Animal(n, o, f, g) {}
    virtual void who() { cout << "Cow!" << endl; }
    virtual void sound() { cout << "moumou!" << endl; }
};

class Zoo
{
private:
    Animal* animals[50];
    int size;
public:
    Zoo() { size = 0; }
    void showAnimals()
    {
        for (int i = 0; i < size; i++)
        {
            if (animals[i] != NULL)
            {
                animals[i]->who();
                animals[i]->sound();
            }
        }
    }
    void addAnimal(Animal* p)
    {
        if (size < 50)
            animals[size++] = p;
    }
};

int main()
{
    Zoo zoo;
    Sheep* pS = new Sheep("Tom", "偶蹄目", "牛科", "绵羊属");
    Dog* pD = new Dog("Jone", "食肉目", "犬科", "犬属");
    Cow* pC = new Cow("Jack", "偶蹄目", "牛科", "牛属");
    zoo.addAnimal(pS);
    zoo.addAnimal(pD);
    zoo.addAnimal(pC);
    zoo.showAnimals();
    return 0;
}


```

#include <iostream>
#include <cstdlib>

using namespace std;
class Animal
{
private:
    string nameID;
    string order;
    string family;
    string genus;

public:
    Animal(string nameID, string order, string family, string genus) : nameID(nameID), order(order), family(family), genus(family) {}
    string to_string()
    {
        return nameID + ":" + order + "、" + family + "、" + genus;
    }
    virtual void who()
    {
        cout << this->nameID << endl;
    }
    virtual void sound() = 0;
};
class Sheep : public Animal //继承
{
public:
    Sheep(string nameID, string order, string family, string genus) : Animal(nameID, order, family, genus) {}
    void who()
    {
        cout << "Sheep!" << endl;
    }
    void sound()
    {
        cout << "miemie!" << endl;
    }
};
class Dog : public Animal //继承
{
public:
    Dog(string nameID, string order, string family, string genus) : Animal(nameID, order, family, genus) {}
    void who()
    {
        cout << "Dog!" << endl;
    }
    void sound()
    {
        cout << "wangwang!" << endl;
    }
};
class Cow : public Animal //继承
{
public:
    Cow(string nameID, string order, string family, string genus) : Animal(nameID, order, family, genus) {}
    void who()
    {
        cout << "Cow!" << endl;
    }
    void sound()
    {
        cout << "EnEn!" << endl;
    }
};
class Zoo
{
private:
    Animal *animals[50];
    int size;

public:
    Zoo() { size = 0; }
    void showAnimals()
    {
        int sheep = 0, dog = 0, cow = 0;
        for (int i = 0; i < this->size; i++)
        {
            Animal *temp = animals[i];
            temp->who();
            cout << temp->to_string() << endl;
            temp->sound();
            if (typeid(*temp) == typeid(Sheep))
            {
                sheep++;
            }
            if (typeid(*temp) == typeid(Dog))
            {
                dog++;
            }
            if (typeid(*temp) == typeid(Cow))
            {
                cow++;
            }
        }
        cout << "羊:" << sheep << "狗:" << dog << "牛:" << cow << endl;
    }
    void addAnimal(Animal *p)
    {
        if (size < 50)
            animals[size++] = p;
    }
};
int main()
{
    Zoo zoo;
    int size = 0;
    Animal *temp;
    while (size++ < 30)
    {
        int index = rand() % 3 + 1;
        switch (index)
        {
        case 1:
            temp = new Sheep("绵羊", "偶蹄目", "牛科", "绵羊属");
            break;
        case 2:
            temp = new Dog("狗", "食肉目", "犬科", "犬属");
            break;
        case 3:
            temp = new Cow("牛", "偶蹄目", "牛科", "牛属");
            ;
            break;

        default:
            break;
        }
        zoo.addAnimal(temp);
    }
    zoo.showAnimals();
    return 0;
}