在 c++ 中是否有任何方法可以使一个类的函数,每个类的对象都为该函数做不同的事情?

Is there anyway in c++ to make a function of a class who's objects each do something different for that function?

本文关键字:函数 对象 不同的事 一个 是否 c++ 任何 方法 可以使      更新时间:2023-10-16

只是一些背景:

我正在制作一个垄断游戏,现在我必须实施每个空间的行动,如GO、房产(升级)、机会、公益金、监狱等。

我考虑过为每个空间制作一个不同的类(但显然这会非常耗时)。我相信还有一种方法可以通过继承和纯虚拟函数来实现。你们有没有想过这会让这个过程变得更简单?

谢谢!

只有几种不同类型的空间:

  • 特性
  • 铁路
  • 机会/公益金
  • 公用设施
  • 其他单身人士,比如去监狱、停车、纳税

例如,您可以有一个Property类,其中该类的每个实例都有不同的名称/颜色/价格。您不必创建22个不同的类,只需有22个具有不同名称的同一类实例即可。

请注意,拥有代表您可以登陆的空间的类实例只是实现类似游戏的一种方法。我很确定我不会选择那个选项。

有两种方法可以让一个函数在给定对象的情况下做不同的事情:

  1. 根据对象的数据区分行为。

    您可以使用数据来捕捉不同空间中的差异。

    enum SpaceType
    {
      GO, CHANCE, COMMUNITY_CHEST,  // etc...
    };
    class Space
    {
      public:
        void foo()
        {
            switch (spaceType)
            {
              case GO:
                // DO stuff for GO
                break;
              case CHANCE:
                // DO stuff for CHANCE
                break;
              // etc..
            }
        }
      private:
        SpaceType spaceType;
    }
    
  2. 根据对象的类型区分行为。

    class Space
    {
       public:
         virtual void foo() = 0;
    };
    class GoSpace : public Space
    {
       public:
         virtual void foo()
         {
           // Do stuff for GO
         }
    };
    class ChanceSpace : public Space
    {
       public:
         virtual void foo()
         {
           // Do stuff for CHANCE
         }
    };
    // Similarly for other classes.
    

选择你的方法。就我个人而言,我会选择第二种方法,因为每种不同类型的逻辑都被放入它们自己的函数中,而不会像其他类型那样复杂