C++ 快速導覽 - 聯合

聯合 (union) 可存放不同資料型態 (data type) 的數值,但是只能有一個成員 (member) 被賦值,例如

#include <iostream>

union Demo {
    int member1;
    float member2;
    char *member3;
};

int main(void)
{
    Demo d;
    d.member1 = 1;
    d.member2 = 2.0;
    d.member3 = "3";
    
    std::cout << "member1: " << d.member1 << std::endl;
    std::cout << "member2: " << d.member2 << std::endl;
    std::cout << "member3: " << d.member3 << std::endl;

    return 0; 
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:uniondemo.cpp
    功能:示範 C++ 程式
    作者:張凱慶
    時間:西元 2013 年 1 月 */


第 3 行定義一個聯合,使用關鍵字 (keyword) union ,其後為聯合的識別字 (identifier) 名稱,後面的大括弧宣告聯合的成員。此例的 Demo 有 3 個成員,分別屬於 intfloatchar 指標 (pointer)
union Demo {
    int member1;
    float member2;
    char *member3;
};


設定或存取聯合的成員可利用小數點運算子 . ,此例編譯執行結果如下



也可以用 -> 運算子存取聯合的成員。


我們可以看到只有 member3 的值是正常的,其他 member1member2 由於變成未定義的值,因此印出來的是記憶體位址的殘值。


聯合其實是一種節省空間的類別 (class) ,也可以嵌入類別中當巢狀聯合 (nested union) 或匿名聯合 (anonymous union) 。


中英文術語對照
聯合union
資料型態data type
成員member
關鍵字keyword
識別字identifier
指標pointer
類別class
巢狀聯合nested union
匿名聯合anonymous union


您可以繼續參考
複合資料型態


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...

沒有留言: