2009-02-12 73 views
17

C++中何时应该使用结构而不是类,反之亦然?当一个成熟的班级管理一些信息看起来像是矫枉过正,但想要指出所包含的信息都是相关的时,我发现自己使用了结构。我想知道什么时候有一个好的指导方针能够告诉我什么时候比另一个更合适?C++中的结构与类

编辑: 发现这些链接在阅读堆栈溢出表示被相关的问题被提交后的材料:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

+0

所以这是一个重复然后 – ChrisW 2009-02-12 22:01:41

回答

14

技术上,两者之间的唯一区别是,结构是公开的:默认和类是私有的:

其他,没有技术差异。

结构vs类然后成为语言纯粹表现的细微差别。

通常,您可以避免将复杂的方法放入结构中,并且大部分时间结构数据成员都将保持公开。在一个类中你想强制封装。

结构=数据是公共的,以非常简单的辅助方法

类=强烈封装,数据被修改/只有通过方法来访问

+0

然而,OP是要求指导方针,这取决于表达的细微差别。我见过 – 2009-02-12 21:56:21

2

使用一个类,如果你有方法,一个结构如果不。

一个类应该隐藏它的所有内部,只暴露方法或属性。结构往往会暴露它的所有内部结构,并且没有访问器方法。

只有一位代码访问某些(相关)数据时,结构可能是完全合理的。如果多位代码需要修改数据或者稍微复杂一点,那么一个类会是更好的选择。

5

我用结构为提供没有构造或操作类型的简单容器。

所有其他类。

1

类和Structs之间的区别在于,结构是变量组,类表示对象。对象具有属性和方法,并且是层次结构的一部分。

如果您使用C++来利用OO功能,最好使用更自然的类/对象。

+0

最佳答案“结构是变量的群体和阶层代表的对象” – Glolita 2012-04-30 15:49:11

0

就个人而言,我使用的结构,当所有我需要的是数据的容器(无成员函数)。 否则,我使用类。

我唯一一个例外的规则是如果我需要一个简单的函子:例如

struct compare { bool operator() { ... } }; 
sort(v.begin(), v.end(), compare()); 

需要一个public:标签只会混淆代码不必要性。

+0

这几乎是谷歌的C++指导。并不是说我遵循/喜欢其他许多方面的指导方针。 – 2009-02-12 21:59:30

0

C++中的结构体是具有public的默认访问方法的类,所以在技术上,除了默认外,没有区别,您可以同时使用这两个类。

然而,也有一些期待和自然的倾向,部分原因是由于在C中的结构++来自C.

我的做法:如果有任何私人数据,构造函数/析构函数,或任何复杂的成员函数(做不仅仅是设置/获取时的转换等),使用类。

1

我总是用类,甚至只是容器,以保持一致性。它纯粹是一种风格的选择,因为两者之间的差异可以忽略不计。

4

当你只需要一个没有你需要保留的逻辑不变量的“桶”时,使用一个结构体。使用一个类来做其他事情。请参阅C++ FAQ says on the subject

1

如果您需要控制访问的数据,您应该使用类。如果你不关心谁在访问什么,以及他们在那里存储什么,那么一个结构可能更合适。

此外,如果您需要对数据本身的完整性进行任何检查,则类更合适。

+1

我在这个答案上找到了两个看法,这对我来说看起来非常好。是什么赋予了? – 2009-02-12 22:25:26