用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; // 指向动物园圈养的动物对象的指针数组
};
...全文
1633 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();	// 调用动物类中描述函数
	}
}
  • 打赏
  • 举报
回复
求助求助
内容概要:本文介绍了“Java+大数据+AI架构师实战营”这一系统性人才培养方案,旨在帮助具备Java基础的开发者在26周内完成向融合Java、大数据与人工智能技术的复合型架构师跃迁。课程围绕五大核心模块展开:架构基本功(微服务演进、分布式锁与ID设计)、数据引擎(亿级数据存储与Flink CDC实时同步)、网关与可观测性(Gateway源码改造、限流与日志采样)、AI融入架构(推荐系统、大模型应用开发)以及架构思维培养。通过“小绿书”项目贯穿始终,强调整合三域技术的系统设计能力而非孤立技能堆叠。; 适合人群:具备1-5年Java开发经验,希望突破技术瓶颈、拓展大数据与AI领域能力的中高级研发人员;适合有志于成长为全栈架构师的技术从业者。; 使用场景及目标:①掌握高并发、分布式系统下的架构设计方法;②理解海量数据的存储分层与实时计算架构;③学会将AI能力如大模型、RAG、向量检索等深度集成到业务系统中;④构建完整的系统可观测性与网关控制能力;⑤形成跨技术域的系统性架构思维。; 阅读建议:此资源以实战项目驱动学习,强调动手实践与架构思维并重。建议学习者结合课程代码与实际调试,深入理解每一环节的技术选型与设计权衡,尤其关注真实生产环境中难以复现的复杂约束,从而建立可迁移的架构“手感”。

65,214

社区成员

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

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