在类定义中使用Custom Struct

时间:2012-11-08 07:28:33

标签: c++ class struct

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

我有一个基本的结构如下:

struct player {
    string name;
    int rating;
 };

和一个可以使用这个结构的类'团队'。考虑到这一点,“球员”结构在球队的公共/私人领域内或在单独的文件中的正确位置在哪里?另外,为了创建它的实例,我还需要做些什么吗?感谢。

5 个答案:

答案 0 :(得分:3)

你必须问自己一个问题。除非与类player结合使用,否则结构team是否无意义?如果是这样,它应该在team内定义;否则,应该独立定义。

那就是:如果有人可以想象使用尚未从player直接检索的team对象,则应该使player成为一个独立的结构。由于我们不了解您的计划背后的一般结构或想法,我们无法给您直接答案。

答案 1 :(得分:1)

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

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

class Team
{

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

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

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

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

答案 2 :(得分:0)

只需在类之前定义结构。 应该做的伎俩...

答案 3 :(得分:0)

我认为团队是玩家的集合,所以使用一些容器来管理团队是很方便的。
 在 STL 中可以找到许多高效的容器,您可以选择最适合您的容器。
另外,为了对与相同任务相关的员工进行分组,您可以使用命名空间

答案 4 :(得分:0)

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

建立班级成员班级的其他“意见”也是可取的;例如迭代器到容器中。迭代器应该是成员还是自由类,更像是一个样式问题而不是其他任何问题(但你应该保持一致);它主要影响名称(ContainerIteratorContainer::Iterator)。

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

鉴于您的课程名称,我非常强烈地怀疑他们应该是独立的,Team1-nPlayer遏制关系。 (我也怀疑它们都是实体对象,应该是不可复制的和不可分配的。但这是另一个问题。)