什么时候应该有人在C ++中使用结构而不是类,反之亦然?当一个完整的类管理一些信息似乎有点过分但我想发现自己使用结构时,我想发现所包含的信息都是相关的。我想知道什么是一个好的指导方针,能够判断哪一个比另一个更合适?
编辑: 在阅读材料时发现这些链接在提交问题后,指示的Stack Overflow是相关的:
When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?
答案 0 :(得分:17)
从技术上讲,两者之间的唯一区别是结构是公共的:默认情况下,类是私有的:
除此之外,没有技术差异。
struct vs class然后成为语言的纯粹表达细微差别。
通常,您避免在结构中放置复杂的方法,并且大多数时间结构数据成员将保持公开。在类中,您希望强制执行强封装。
struct = data是公共的,有非常简单的辅助方法
class =强封装,仅通过方法修改/访问数据
答案 1 :(得分:6)
我将结构用于不提供构造函数或运算符的类型的简单容器。
其他一切的课程。
答案 2 :(得分:4)
当你只需要一个没有你需要保留的逻辑不变量的“存储桶”时使用结构。将课程用于其他任何事情。
答案 3 :(得分:2)
如果您有方法,则使用类,否则使用结构。
一个类应该隐藏其所有内部结构,只暴露方法或属性。结构倾向于暴露其所有内部结构,并且没有访问器方法。
只有一位代码访问某些(相关)数据,结构可能是完全合理的。多位代码需要修改数据,或者如果它有点复杂,那么一个类就更好了。
答案 4 :(得分:1)
Classes和Structs之间的区别在于结构是变量组,而类表示对象。对象具有属性和方法,并且是层次结构的一部分。
如果您正在使用C ++来利用OO功能,那么最好使用更自然的类/对象。
答案 5 :(得分:1)
我总是使用类,即使只是容器,也要保持一致性。它纯粹是一种风格选择,因为两者之间的差异可以忽略不计。
答案 6 :(得分:1)
如果您需要控制访问数据,则应使用类。如果你不关心谁在访问什么,以及他们在那里存储什么,那么结构可能更合适。
此外,如果您需要对数据本身的完整性进行任何检查,则更合适。
答案 7 :(得分:0)
答案 8 :(得分:0)
就个人而言,当我需要的只是一个数据容器(没有成员函数)时,我使用结构。 否则,我使用类。
我唯一一次对该规则做出例外的是,如果我需要一个简单的仿函数:例如
struct compare { bool operator() { ... } };
sort(v.begin(), v.end(), compare());
对public:
标签的需求只会使代码不必要地混乱。
答案 9 :(得分:0)
结构体是一个默认访问方法为public的类,因此技术上除了默认访问方法之外没有任何区别,你可以使用它们等效。
然而,有一些期望和自然倾向,部分原因是因为C ++中的结构来自C。
我的方法:如果它有任何私有数据,构造函数/析构函数或任何复杂的成员函数(不仅仅是在set / get上进行转换等),请使用class。