请编写程序,上机调试,题目如下图,请按题目要求编写,并给出程序
程序完成了一半现在的问题是不知道如何调用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;
}