用c++写一个简单的动物园管理程序,求助

疯人院的院长大人
博客专家认证
2012-11-26 05:36:17
要求: •定义一个类Animal,该类中可以存放动物的名字,并有一个identify函数用于显示动物的种类。
•定义两个类Cat和Dog,都继承自Animal,并重载identify函数,不但要显示动物的种类,还要显示动物的名字。
•定义Tiger类,继承自Cat,重载identify函数,显示动物的种类和名字。
•定义一个动物园类Zoo,管理动物,根据下面的提示编写动物类及相关函数。注意指针虚函数的用法。
//对于这个zoo类怎么实现管理想了很久也没想出来,谁帮个忙写下啊,写个完整的更加开心啊,或者给个思路也行啊
下面这段代码必须有的,老师给的
class Zoo
{
public: Zoo(int max);
~Zoo()
{delete residents; }
int Accept(Animal *a);
void ListAnimals();
private: int maxAnimals; //动物园能最多圈养的动物数
int numAnimals; //动物园当前圈养的动物数
Animal **residents; // 指向动物园圈养的动物对象的指针数组
};
...全文
1413 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hznat 2012-11-28
  • 打赏
  • 举报
回复
引用 9 楼 zhonglunshun 的回复:
引用 8 楼 smallnat 的回复:修改构造函数,必须初始化numAnimals。 C/C++ code?1234567// 构造函数Zoo::Zoo(int max){ numAnimals = 0; // 原始动物数 maxAnimals = max; // 初始化最大圈养动物数 resi……
你的报错应该是你的Zoo::Accept函数的参数类型写的有问题,你自己检查一下。 “如果这样是不是没有接收其他类比如老虎,猫,” --是的。如果“动物园”需要“接收”其他动物,就要分别调用z.Accept()函数。
  • 打赏
  • 举报
回复
引用 8 楼 smallnat 的回复:
修改构造函数,必须初始化numAnimals。 C/C++ code?1234567// 构造函数Zoo::Zoo(int max){ numAnimals = 0; // 原始动物数 maxAnimals = max; // 初始化最大圈养动物数 residents = new Animal*[……
调用它之后为什么报错呢
error C2440: 'initializing' : cannot convert from 'class Dog *' to 'int'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
执行 cl.exe 时出错.
还有我对为什么&D1,如果这样是不是没有接收其他类比如老虎,猫,能在帮忙看看吗
盛夏 2012-11-27
  • 打赏
  • 举报
回复
这写的还不够完整?? 其他的你既然会了干嘛还要别人写? 自己动动手啊!
引用 2 楼 smallnat 的回复:
C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142class Zoo { public: Zoo(int max); ~Zoo() { delete residents; } int Accept(A……
hznat 2012-11-27
  • 打赏
  • 举报
回复 1
修改构造函数,必须初始化numAnimals。
// 构造函数
Zoo::Zoo(int max)
{
    numAnimals = 0;				  // 原始动物数
    maxAnimals = max;             // 初始化最大圈养动物数
    residents = new Animal*[max]; // 申请指针数据
}
主函数增加Accept函数的调用:
int main()
{
    Zoo z(100);
    Dog D1("小黄");
    Tiger T1("小黑");
    Cat C1("小咪");
 
	z.Accept(&D1);
    z.ListAnimals();
    return 0;
}
  • 打赏
  • 举报
回复
引用 6 楼 smallnat 的回复:
C/C++ code?1residents = new Animal*[max]; 这个我写错了
我上面写的那个玩意能帮忙看看么,不能完成要求。输出为空
  • 打赏
  • 举报
回复
能不能把整个函数也写了呢,感激不尽啊。
hznat 2012-11-27
  • 打赏
  • 举报
回复
residents = new Animal*[max];
这个我写错了
  • 打赏
  • 举报
回复 1
大师,我写到这里不会了,你帮忙看看该怎么改才可以呢?
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;

class Animal{                   //Animal类
public:
	Animal(){}
	Animal(string name1)
	{name=name1;}
	virtual void identify()=0;
protected:
	string name;
};


class Cat:public Animal{                //Cat类
public:
	Cat(string name):Animal(name)
	{}
	void identify()
	{cout<<setw(8)<<"Cat"<<name<<endl;}
};


class Dog:public Animal{                 //Dog类
public:
	Dog(string name):Animal(name)
	{}
	void identify()
	{cout<<setw(8)<<"Dog"<<name<<endl;}
};


class Tiger:public Cat{                 //Tigre类,父类为Cat
public:
	Tiger(string name):Cat(name)
	{}
	void identify()
	{cout<<setw(8)<<"Tiger"<<name<<endl;}
};

class Zoo 
{ 
public: 
	Zoo(int max); 
	~Zoo()
	{delete residents; }

	int Accept(Animal *a); 
	void ListAnimals(); 
private: 
	int maxAnimals; //动物园能最多圈养的动物数 
	int numAnimals; //动物园当前圈养的动物数 
	Animal **residents; // 指向动物园圈养的动物对象的指针数组 
};

// 构造函数
Zoo::Zoo(int max)
{
	maxAnimals = max;				// 初始化最大圈养动物数
	residents = new Animal[max];	// 申请指针数据
}

int Zoo::Accept(Animal *a)
{
	if (numAnimals == maxAnimals)	// 判断是否已经到大最大圈养数
	{
		return -1;
	}
	residents[numAnimals] = a;
	numAnimals++;
	return 0;
}

void Zoo::ListAnimals()
{
	for (int i=0; i<numAnimals; i++)
	{
		residents[i]->identify();	// 调用动物类中描述函数
	}
}

int main()
{
	Zoo z(100);
	Dog D1("小黄");
	Tiger T1("小黑");
	Cat C1("小咪");

	z.ListAnimals();
	return 0;
}
hznat 2012-11-26
  • 打赏
  • 举报
回复 1
class Zoo 
{ 
public: 
	Zoo(int max); 
	~Zoo()
	{
		delete residents; 
	}

	int Accept(Animal *a); 
	void ListAnimals(); 
private: 
	int maxAnimals; //动物园能最多圈养的动物数 
	int numAnimals; //动物园当前圈养的动物数 
	Animal **residents; // 指向动物园圈养的动物对象的指针数组 
};

// 构造函数
Zoo::Zoo(int max)
{
	maxAnimals = max;				// 初始化最大圈养动物数
	residents = new Animal[max];	// 申请指针数据
}

int Zoo::Accept(Animal *a)
{
	if (numAnimals == maxAnimals)	// 判断是否已经到大最大圈养数
	{
		return -1;
	}
	residents[numAnimals] = a;
	numAnimals++;
	return 0;
}

void Zoo::ListAnimals()
{
	for (int i=0; i<numAnimals; i++)
	{
		residents[i]->identify();	// 调用动物类中描述函数
	}
}
  • 打赏
  • 举报
回复
求助求助

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧