您的位置:首页 > 其它

struct,class,union

2015-09-16 09:56 162 查看
1.struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。

struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

到底是用struct还是class,完全看个人的喜好,你可以将程序里所有的class全部替换成struct,它依旧可以很正常的运行。但我给出的最好建议,还是:当你觉得你要做的更像是一种数据结构的话,那么用struct,如果你要做的更像是一种对象的话,那么用class。 

当然,我在这里还要强调一点的就是,对于访问控制,应该在程序里明确的指出,而不是依靠默认,这是一个良好的习惯,也让你的代码更具可读性。 说到这里,struct和class的“唯一”区别就是访问控制。 

class 和 struct 区别

1.成员变量

结构在默认情况下的成员是公共(public)的,
而类在默认情况下的成员是私有(private)的。

 

2.存储

truct保证成员按照声明顺序在内存中存储。class不保证等等

 

3.继承

struct A { }; 

class B : A{ }; //private继承 

struct C : B{ }; //public继承 
这是由于class默认是private,struct默认是public。

 

struct和union的区别

1、对于一个union类型的变量,所有成员变量共享一块内存,该内存的大小有这些成员变量中长度最大的一个来决定 

2、union分配的内存是连续的,这一点非常重要

 

那为什么要发明union呢?这是由于union的特性决定的,特别是上述的第二点,因为struct中成员变量虽然内存都是独立的,但是struct不能保证分配的内存是连续的。 

在C++中 class 和 struct 本质上一样 可以互用
class的成员默认是private的,struct的成员默认是public的
但一般习惯把成员变量隐藏的用class申明, 成员变量可以公开访问并且比较简单的用struct申明(个人理解是struct是从c来的,在c中就是那么用的)

至于union,不论其内部有多少成员,在任意时刻,只有一个可用,因为所有成员公用的一个地址
例如
union A
{
   int a;
   float f;
   struct ST st;
};
中的三个变量 a,f,st的地址都是一样的,也就是在一起的,
但sizeof(A)  的大小是其中变量最大的一个的大小(不考虑字节对其啥的)
这是因为三个变量在同一地址,所以其大小必须能够满足任意一个变量使用,所以就必须使用最大的那个了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: