根据以下要求,完成编程。
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动物园,并依次输出当前圈养的动物信息。
试试。
#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";
}