这是一个相对简单的问题,但细节让我感到困惑。
我有一个基本的结构如下:
struct player {
string name;
int rating;
};
和一个可以使用这个结构的类'团队'。考虑到这一点,“球员”结构在球队的公共/私人领域内或在单独的文件中的正确位置在哪里?另外,为了创建它的实例,我还需要做些什么吗?感谢。
答案 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)软件中,大多数嵌套类仅在外部类中使用,并且是私有的。或者它们是代理,用于从外部类的函数返回值,但从不由外部类的客户端声明。
建立班级成员班级的其他“意见”也是可取的;例如迭代器到容器中。迭代器应该是成员还是自由类,更像是一个样式问题而不是其他任何问题(但你应该保持一致);它主要影响名称(ContainerIterator
与Container::Iterator
)。
最后,模板引入了另一个维度:给定T
类型的模板,在此模板中,很容易引用T
的成员,包括成员类型;找不到“不相关”的类型是不可能的。换句话说,如果您使用T == Container
实例化模板,则Container::Iterator
可以typename T:Iterator
显示,但您无法找到ContainerIterator
。
鉴于您的课程名称,我非常强烈地怀疑他们应该是独立的,Team
与1-n
有Player
遏制关系。 (我也怀疑它们都是实体对象,应该是不可复制的和不可分配的。但这是另一个问题。)