C++中的联合(union)

联合(union)

联合(union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的。每个数据成员都在相同的内存地址开始。分配给联合的存储区数量是要包含它最大的数据成员所需的内存数。同一时刻只有一个成员可以被赋给一个值。

举例:

union Test

{

char cval;

int ival;

char *sval;

double dval;

};

此联合中最大的数据类型是double,所以这个联合的大小是double型对象的大小。

因为联合是一种特殊类,所以union的成员也是通过类成员访问操作符(.和->)访问,union中也可以包含构造函数和析构函数,成员变量和成员函数,也可以声明为public、private、protected。缺省情况下默认为public。总结一下联合的特点:

1. union可以定义自己的函数,包括构造函数和析构函数。

2. union支持public、private、protected权限。

3. union不能被继承,它不能有父类也不能有子类。

4. union中不能定义虚函数。

5. union中不能有静态数据成员和引用数据成员。

6. 如果一个类类型定义了构造函数、析构函数或拷贝赋值操作符,则它不能成员union的成员类型。

7. 不允许对union变量做初始化赋值,只能在程序中赋值。

8. 一个union变量只能赋予一个成员值,换句话说一个union变量的值就是union变量某一成员的值。


匿名联合

一种特殊的联合,匿名union 是没有名字的union,它后面也没有跟着对象定义。仅仅通知编译器它的成员变量共同享一个地址,而变量本身是直接引用的,不使用通常的点号运算符语法。

举例:

union

{

char cVal;

int iVal;

char *sVal;

double dVal;

} test;

上面这个union不是匿名union,因为它后面有对象定义。

匿名union的特点:

1. 匿名union 的数据成员可以在定义匿名union 的域中被直接访问。

2. 匿名union 不能有私有或保护的成员也不能定义成员函数。

3. 在全局域以及namespace中定义的匿名union只能声明为static。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值