1

这是一个相对简单的问题,但细节让我感到困惑。

我有一个基本结构如下:

struct player {
    string name;
    int rating;
 };

和一个使用这个结构的类“团队”。考虑到这一点,“玩家”结构的正确放置位置在团队的公共/私有字段中还是在单独的文件中?另外,为了创建它的实例,我需要做些什么不同的事情吗?谢谢。

4

5 回答 5

3

你必须问自己一个问题。player除非与 class 结合使用,否则struct 是否毫无意义team?如果是这样,它可能应该在里面定义team;否则,应独立定义。

也就是说:如果有人可以想象要使用player尚未从 a 中直接检索到的对象,则team应该创建player一个独立的结构。由于我们不知道您的程序背后的一般结构或想法,我们无法直接回答您。

于 2012-11-08T07:37:38.243 回答
1

这取决于您如何使用团队/玩家结构。如果您的播放器被应用程序的其他部分使用,您应该让播放器独立,这是大多数情况下的做法。

struct Player {
  int rating;
  std::string name;
};

class Team
{

private:
  std::vector<Player> players_;  // here you have a bunch of players
};

如果您Player完全被内部使用Team并且没有人使用它,您可以将它放在Teamstruct/class 中以缩小其名称范围。

 class Team
 {
 private:
   struct Player{
      int rating;
      std::string name;
   };

 private:
  std::vector<Player> players_;  // here you have a bunch of players
 };
于 2012-11-08T07:40:16.647 回答
0

只需在类之前定义结构。这应该够了吧...

于 2012-11-08T07:31:09.857 回答
0

我认为一个团队是一个玩家的集合,所以使用一些容器来管理团队是很方便的。在STL
中可以找到很多高效的容器,由您选择最适合您需要的容器。 还要提一下,为了对与同一任务相关的人员进行分组,您可以使用namespace

于 2012-11-08T08:28:19.013 回答
0

关键是能Player不能不用用就用Team。如果是这样,它应该是一个单独的类,而不是嵌套的。在精心设计的传统 (OO) 软件中,大多数嵌套类仅在外部类内部使用,并且是私有的。或者它们是代理,用于从外部类的函数返回值,但从未由外部类的客户端声明。

对类成员类提出其他“观点”也可能被认为是可取的;例如将迭代器放入容器中。迭代器应该是成员还是自由类,更多的是风格问题(但你应该保持一致);它主要影响名称(ContainerIteratorvs. Container::Iterator)。

最后,模板引入了另一个维度:给定一个 type 上的T模板,在这个模板中,引用成员(包括成员类型)很容易T;不可能找到“不相关”的类型。换句话说,如果您使用 实例化模板T == ContainerContainer::Iterator则可以随时使用typename T:Iterator,但您无法找到ContainerIterator

鉴于您的类的名称,我强烈怀疑它们应该是独立的,Team并且1-nPlayer. (我还怀疑两者都是实体对象,应该使其不可复制和不可分配。但这是另一个问题。)

于 2012-11-08T08:50:54.347 回答