联合(Union)是一种特殊的数据结构,允许在同一内存位置存储不同的数据类型。一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。以下是联合的主要特点和使用方式:
- 默认访问控制符:成员默认为
public
。 - 构造函数和析构函数:可以有构造函数和析构函数。
- 引用类型成员:不能包含引用类型的成员。
- 继承和虚函数:不能作为基类,也不能含有虚函数。
- 匿名联合:在定义所在作用域可直接访问联合成员,但不能包含
protected
或private
成员。 - 全局匿名联合:必须声明为静态(
static
)。
代码示例:
#include <iostream>
// 定义具有默认构造函数的联合
union UnionTest {
UnionTest() : i(10) {} // 构造函数初始化 i 成员为 10
int i;
double d;
};
// 全局静态匿名联合
static union {
int i;
double d;
};
int main() {
UnionTest u; // 创建 UnionTest 的实例 u
union {
int i;
double d;
}; // 局部匿名联合
std::cout << u.i << std::endl; // 输出 UnionTest 联合的成员 i,值为 10
::i = 20; // 访问全局静态匿名联合的成员 i
std::cout << ::i << std::endl; // 输出全局静态匿名联合的成员 i,值为 20
i = 30; // 访问局部匿名联合的成员 i
std::cout << i << std::endl; // 输出局部匿名联合的成员 i,值为 30
return 0;
}