文档库 最新最全的文档下载
当前位置:文档库 › C++ 中定义类的三种 方式

C++ 中定义类的三种 方式

C++ 中定义类的三种 方式



在java 中我们知道定义一个类用class 关键字就足够了,但是在c++ 中不一样,c++ 中定义一个类可以使用三种不同的方式:class 、struct (结构)和union (联合)。

为什么定义一个类需要用三种不同的方式?这样会不会造成概念上的混淆?答案确是如此,但是如果我们能对此三者的概念清晰地了解,这种担忧也许能化解了无。

c++ 语言在设计时实际上考虑是对c 语言的升级,它并没有摆脱c 而独成体系,仅仅是在c 语言的基础上增加了一些诸如面向对象的思想。同时它也希望是和c 兼容的,所以在c++ 语言里有很多c 的概念是保留着的(即使对于面向对象语言显得很别扭)。struct 和union 就是c 语言中的概念,当然c++ 对它们的功能进行了继承和增加。class 是c++ 面向对象思想上新增的概念。

在c 语言里,程序可以看作是“数据+ 函数”的组合,数据可以包含在函数里,但函数不能包含在数据里。struct 和union 在c 语言里只能保存具体的数据类型,而不能包含函数。因为吸取了面向对象的思想,c++ 对此进行了扩展,struct 和union 里可以包含函数。如此以来,struct 、union 和class 就具有极为相似的功能—— 既可以保存数据,又可以保存函数,这就是一个完全的类的概念。虽然这么说,但三者也有所不同。

struct 和class 的作用几乎一样,两者的唯一区别在于由class 定义的类所有成员的默认访问权限为private ,而struct 定义的类所有成员默认访问权限为public 。除此之外,两者的作用是相同的。c++ 中让struct 和class 同时存在的唯一的目的是与c 兼容。

联合(union )是比较特殊的数据结构,在c/c++ 中, 联合变量的定义与结构十分相似,但联合规定了其内部的多个成员变量只能共用一个内存地址, 即在同一时间只能保存一个数据成员,union 的长度是联合中最大变量的长度。
从此特点可以看出结构和联合有下列区别:
1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员, 而结构的所有成员都存在。
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在, 而对于结构的不同成员赋值是互不影响的。

基于以上的特点,union 定义的类与struct,class 相差较大。union 定义类的数据成员只能共享一个内存地址;和class 一样,union 定义的类成员的访问权限默认为public 。

相关文档