1. 说明
联合(union)是一种节省空间的特殊的类,一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。联合有如下特点:
-
默认访问控制符为 public
-
可以含有构造函数、析构函数
-
不能含有引用类型的成员
-
不能继承自其他类,不能作为基类
-
不能含有虚函数
-
匿名 union 在定义所在作用域可直接访问 union 成员
-
匿名 union 不能包含 protected 成员或 private 成员
-
全局匿名联合必须是静态(static)的
2. 使用
union 关键字的用法与struct 的用法非常类似。
union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。例子如下:
union StateMachine
{
char character;
int number;
char *str;
double exp;
};
一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是double 型态,所以StateMachine 的空间大小就是double 数据类型的大小。