我的任务是
“我的狗叫巴迪(Buddy),住在后院。当他看到一只猫或一只松鼠来探望时,他夜里吠叫。如果他看到一只青蛙,并且饿了,就吃它。如果他看到一只青蛙,他就吃了。如果他已经吃了两只青蛙,但仍然饿了,他就放手了;如果他看到了土狼,他会哭着寻求帮助。有时他的朋友Spot会路过,然后他们互相追逐,如果他看见其他动物,他只是看着它。
编写一个测试程序和一组类,以跟踪所有后院活动并将结果存储到给定的夜晚的文件中。我希望您会有一个动物类,以及从该动物类继承的猫,狗,松鼠,土狼类。您需要跟踪他吃了多少只青蛙,每种类型的动物有多少来过,拜访过,他玩过多少次以及其他细节。 ”
您还需要编写一个测试程序,该程序将读取从另一个测试程序生成的文件,并打印出他所见过的每种类型的动物数量,以及他在特定的一天对它们进行的处理。用户将需要输入日期,文件中该日期的信息将被读取并显示。
在您需要的程序中添加任何其他功能,以便涵盖列出的所有必需的编程概念。这项作业要有创造力。
-我们将使用类,数据抽象,继承,组合,指针,运算符重载和异常处理。
#include <iostream>
#include <cstdlib>
using namespace std;
class animal{
public:
animal();
~animal();
void interactWithBuddy();
virtual int ID()
{
return ID;
}
};
class frog: public animal
{
public:
void interactWithBuddy();
void eat();
void play();
void letGo();
};
class dog: public animal
{
public:
void interactWithBuddy();
void chase();
};
class cat: public animal
{
public:
void interactWithBuddy();
void bark();
};
class coyote: public animal
{
public:
void interactWithBuddy();
void cryForHelp();
};
class squirrel: public animal
{
public:
void interactWithBuddy();
void bark();
};
class otherAnimal: public animal
{
public:
void interactWithBuddy();
void watch();
};
int main ()
{
srand(time(0));
int number;
std::cout << (rand() % 6 + 1) <<std::endl;
animal * a = new frog();
int z = a->ID();
animal * b = new dog();
int y = a->ID();
animal * c = new cat();
int x = a->ID();
animal * d = new coyote();
int w = a->ID();
animal * e = new squirrel();
int v = a->ID();
animal * f = new otherAnimal();
int u = a->ID();
return 0;
}
我知道代码只是一个外壳,但是我走对了吗?您如何建议数数青蛙并弄清楚它们是被食用,玩耍还是放手?另外,我想给每个动物子类分配一个数字,然后我可以在该数字中随机分配主函数,以便与该分配相关联,但是我不确定该怎么做。提示和指针将非常受欢迎。
最佳答案
您在基础类中投入过多。并非所有动物都能做其他人也可以做的所有事情。您的animal
类应仅包含任何动物都可以拥有/可以做的事情。所有特定于具体动物(例如狗或青蛙)的东西都应放在相应的类别中。例如,并非所有动物都可以bark()
,因此此函数不应在基类中。
您如何建议数数青蛙并弄清楚它们是被食用,玩耍还是放手?
好吧,因为它是可以看到青蛙的狗,所以有必要在dog
类中添加一个计数器。
我也想给每个动物子类分配一个数字
然后随机化主函数,以便与
作业,但我不确定如何完成。
我不太明白你这是什么意思。您是说要为每个类创建标识符吗?如果是,您为什么需要这样做?
UPD:
是的,这是正确的方法。最简单的方法是为每只动物分配1到6之间的数字,然后在需要确定出现哪只动物时,在[1,6]
范围内生成一个随机数。要为动物分配编号,您应该添加int id;
之类的字段,并在每个类中为其分配不同的值。
UDP 2:
这就是多态性发挥作用的地方。首先,要为类初始化const成员,您需要使其成为静态。这是一个简单的例子:
class base
{
public:
static const int ID = -1;
};
class derived: public base
{
public:
static const int ID = 1;
};
现在,基类的每个对象的ID都为-1,派生类的每个对象的ID都为1。但是,如果尝试从这样的基类指针中使用它:
base * a = new derived();
int t = a->ID;
您将总是得到-1,因为基类指针不知道它指向什么。
为了获得正确的ID,您将需要创建一个虚函数:
virtual int getId(){ return ID; }
现在,如果你愿意
base * a = new derived();
int t = a->getID();
您将始终从“真实”类型
a
指向的位置获得正确的ID。关于c++ - C++对动物进行计数并与基类进行随机交互,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12104137/