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 。


Original URL: http://blog.csdn.net/acosoft/article/details/4447706

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值