struct,class,union

来源:互联网 发布:淘宝购物拒签会怎样 编辑:程序博客网 时间:2024/06/05 09:53

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默认是privatestruct默认是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)  的大小是其中变量最大的一个的大小(不考虑字节对其啥的)
这是因为三个变量在同一地址,所以其大小必须能够满足任意一个变量使用,所以就必须使用最大的那个了。


0 0
原创粉丝点击