在哪种情况下,在C ++中使用struct
比使用class
更好?
#1楼
它们是相同的东西,具有不同的默认值(对于class
默认为private,对于struct
默认为public),因此从理论上讲它们是完全可以互换的。
因此,即使我只想打包一些信息来移动,我也使用了一个结构,即使我在其中放了一些方法(但不是很多)。 如果是最不透明的东西,主要用途是通过方法,而不是直接传递给数据成员,则使用完整类。
#2楼
默认情况下,结构具有公共访问权限,而类则默认具有私有访问权限。
我个人将结构用于数据传输对象或用作值对象。 当这样使用时,我将所有成员声明为const,以防止被其他代码修改。
#3楼
正如其他所有人所指出的,实际上只有两种实际语言差异:
-
struct
默认为公共访问,而class
默认为私有访问。 - 继承时,
struct
默认为public
继承,而class
默认为private
继承。 (具有讽刺意味的是,与C ++中的许多事情一样,默认值是向后的:到目前为止,public
继承是更常见的选择,但是人们很少声明struct
只是为了节省键入“public
”关键字的时间。
但是实际上,真正的区别是在声明了构造函数/析构函数的class
/ struct
与未声明构造函数/析构函数的class
/ struct
之间。 对于“普通数据” POD类型有某些保证,一旦您接管了班级的建设,这些保证将不再适用。 为了清楚地区分,许多人故意将struct
用作POD类型,并且,如果他们要添加任何方法,请使用class
es。 否则,以下两个片段之间的区别是没有意义的:
class X
{
public:
// ...
};
struct X
{
// ...
};
(顺便说一下,这里的一个线程对“ POD类型”的实际含义做了一些很好的解释: C ++中的POD类型是什么? )
#4楼
结构的成员和基类默认情况下是公共的,而在类中,它们默认是私有的。 注意:应将基类显式设置为公共,私有或受保护,而不要依赖默认值。
struct和class在功能上是等效的。
好的,足够的干净利落的技术讨论。 从情感上讲,大多数开发人员在类和结构之间做出强烈区分。 结构只是感觉像是一堆开放的位,几乎没有封装或功能性的方式。 班级感觉像是一个有活力的社会成员,拥有智能的服务,强大的封装障碍和明确定义的界面。 因为这是大多数人已经拥有的含义,所以如果您有一个方法很少且具有公共数据的类,则应该使用struct关键字(这种情况确实存在于设计良好的系统中!)