#include
#include
using namespace std;
class Animal
{
public:
virtual void Identify()
{
cout<<"I am an animal:"<<name<<endl;
}
Animal(string a)
{
name=a;
}
protected:
string name;
};
class Cat:public Animal
{
public:
Cat(string a):Animal(a) {};
virtual void Identify()
{
cout<<"I am a cat:"<<name<<endl;
}
};
class Dog:public Animal
{
public:
Dog(string a):Animal(a) {};
virtual void Identify()
{
cout<<"I am a dog:"<<name<<endl;
}
};
class Tiger:public Cat
{
public:
Tiger(string a):Cat(a) {};
virtual void Identify()
{
cout<<"I am a cat:"<<name<<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)
{
max_animals=max;
num_animals=0;
}
void Zoo::Accept(Animal *d)
{
if(num_animals<max_animals)
{
*residents[num_animals]=*d;
num_animals++;
}
else
{
cout<<"该动物园已满员。"<<endl;
}
}
void Zoo::ListAnimal()
{
if(num_animals==0)
{
cout<<"该动物园里没有动物。"<<endl;
}
cout<<"该动物园里有动物:"<<endl;
for(int i=0;i<num_animals;i++)
{
*residents[i]->Identify();
cout<<endl;
}
}
int main()
{
Zoo shanghai(3);
Animal *p;
Cat c("汤姆猫");
p=&c;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
Dog d("汪汪狗");
p=&d;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
Tiger t("贝乐虎");
p=&t;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
return 0;
}