聯合(Union)是一種特殊的數據結構,允許在同一內存位置存儲不同的數據類型。一個 union 可以有多個數據成員,但是在任意時刻只有一個數據成員可以有值。當某個成員被賦值后其他成員變為未定義狀態。以下是聯合的主要特點和使用方式:
- 默認訪問控制符:成員默認為?
public
。 - 構造函數和析構函數:可以有構造函數和析構函數。
- 引用類型成員:不能包含引用類型的成員。
- 繼承和虛函數:不能作為基類,也不能含有虛函數。
- 匿名聯合:在定義所在作用域可直接訪問聯合成員,但不能包含?
protected
?或?private
?成員。 - 全局匿名聯合:必須聲明為靜態(
static
)。
代碼示例:
#include <iostream>// 定義具有默認構造函數的聯合
union UnionTest {UnionTest() : i(10) {} // 構造函數初始化 i 成員為 10int i;double d;
};// 全局靜態匿名聯合
static union {int i;double d;
};int main() {UnionTest u; // 創建 UnionTest 的實例 uunion {int i;double d;}; // 局部匿名聯合std::cout << u.i << std::endl; // 輸出 UnionTest 聯合的成員 i,值為 10::i = 20; // 訪問全局靜態匿名聯合的成員 istd::cout << ::i << std::endl; // 輸出全局靜態匿名聯合的成員 i,值為 20i = 30; // 訪問局部匿名聯合的成員 istd::cout << i << std::endl; // 輸出局部匿名聯合的成員 i,值為 30return 0;
}