【问题标题】:C++ base and sub class circular referencesC++ 基类和子类循环引用
【发布时间】:2020-07-16 07:53:58
【问题描述】:

我有一个带有子类播放器的 C++ 类游戏,它有子类建筑和公民。

class Game 
{
class player 
{
class citizen{};
class building{};
};
};

每个类都在自己的 .cpp 中

我想将我创建的玩家存储在游戏类的数组中,但我最终需要将我的子类包含在我的基类中,该基类需要包含我要定义的父类。

我还有很多东西要从 C++ 中学习,但我觉得克服这个问题的唯一方法是将播放器类中的数组作为静态数组。有没有更好的方法来实现我想要的?

【问题讨论】:

  • 真的需要嵌套类吗?例如,您可以定义一个独立 player 类,然后在您的Game 类中拥有该类的成员(对象),依此类推。
  • ... 甚至有一个 player 对象的向量(或数组),如果您在游戏中需要多个玩家(这似乎很可能)。
  • 你不需要嵌套类。但是,如果Game 包含Player 的实例,则编译器在编译Game 时需要查看Player 的定义(例如,来自头文件)。
  • 我认为 player 不应该是一个嵌套类。它应该在自己的头文件中,并包含在您的 Game 类中(或者如果可能的话,前向声明)。
  • 我认为一个重要的缺失信息是为什么你要嵌套这些类?一旦我们了解了这一点,也许我们可以帮助您弄清楚如何完成您正在做的事情。现在,这似乎是XY Problem

标签: c++ class include


【解决方案1】:

我认为问题在于您在类中定义了多个类。本着良好编码实践的精神,每个逻辑单元(即您的类)应该单独定义,然后可能作为成员包含在其他类中(但 not 在类中是否有自己的定义包含它)。

所以,如果Game 对象有一个Player 对象列表,以及CitizenBuilding 对象,那么您需要看起来更像:

class Player {
    //Player definition
}

class Citizen {
    //Citizen definition
}

class Building {
    //Building definition
}

class Game {
    private:
        Player myPlayersList[4]; //an array of 4 player objects
        Citizen someCitizen; //a single Citizen object
        Building someBuilding; //a single Building object
    //more Game definition
}

如果您有任何问题,请随时发表评论!

【讨论】:

  • 我想你只是让我意识到我是如何做到这一点的。我可以让每个班级都拥有自己的班级,然后将这些其他班级的数组放入需要它的班级中。那应该可以解决我的问题。如果可行的话,我要感谢你(以及其他对我的问题发表评论的人)。
猜你喜欢
  • 2018-12-22
  • 2011-05-09
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多