我的任务是


  “我的狗叫巴迪(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/

10-11 16:07