다음을 통해 공유


공용 구조체

union은 사용자 정의 데이터 또는 클래스 형식으로, 언제나 해당 멤버 목록에 있는 한 개체만 포함합니다. 이때 포함되는 개체는 배열 또는 클래스 형식이 될 수 있습니다.

union [tag]  { member-list } [declarators]; [union] tag declarators;

매개 변수

  • tag
    공용 구조체에 지정된 형식 이름입니다.

  • member-list
    공용 구조체에 포함될 수 있는 데이터 형식의 목록입니다. 설명 부분을 참조하십시오.

  • declarators
    공용 구조체의 이름을 지정하는 선언자 목록입니다. 자세한 내용은 선언자 개요를 참조하십시오.

설명

공용 구조체의 member-lis에는 공용 구조체에 포함될 수 있는 데이터 종류가 표시됩니다. 공용 구조체에는 가장 큰 멤버를 member-list에 보유할 수 있는 충분한 저장소가 필요합니다. 자세한 내용은 공용 구조체 선언(C 언어 참조)을 참조하십시오.

공용 구조체 선언

union 키워드를 사용하여 공용 구조체의 선언을 시작하고 중괄호로 멤버 목록을 묶습니다.

// declaring_a_union.cpp
union DATATYPE    // Declare union type
{
    char   ch;
    int    i;
    long   l;
    float  f;
    double d;
    int *int_ptr;
} var1;          // Optional declaration of union variable

int main()
{
}

공용 구조체 사용

C++ 공용 구조체는 제한된 형태의 클래스 형식입니다. 생성자 및 소멸자를 포함하여 액세스 지정자(public, protected, private), 멤버 데이터 및 멤버 함수를 포함할 수 있습니다. 가상 함수 또는 정적 데이터 멤버는 포함할 수 없습니다. 기본 클래스로 사용할 수 없으며 기본 클래스를 가질 수도 없습니다. 공용 구조체에서 멤버의 기본 액세스는 public입니다.

C++에서는 공용 구조체 변수를 선언할 때 union 키워드를 사용할 필요가 없습니다.

DATATYPE var3;         // C++ declaration of a union variable

공용 구조체 형식의 변수는 공용 구조체에 선언된 임의의 형식의 값을 하나 보유할 수 있습니다. 다음과 같이 멤버 선택 연산자(.)를 사용하여 공용 구조체의 멤버에 액세스합니다.

var1.i = 6;           // Use variable as integer
var2.d = 5.327;       // Use variable as double 

중괄호 안에 식을 배치하여 동일한 문에서 공용 구조체를 선언하고 초기화할 수 있습니다. 식이 확인되면 공용 구조체의 첫 번째 필드에 할당됩니다.

예제

#include <iostream>
using namespace std;

union NumericType
{
    int         iValue;
    long        lValue;  
    double      dValue;  
};

int main()
{
    union NumericType Values = { 10 };   // iValue = 10
    cout << Values.iValue << '\n';
    Values.dValue = 3.1416;
    cout << Values.dValue);
}

출력

10
3.141600

NumericType 공용 구조체는 다음 그림과 같이 개념적으로 메모리에 배열됩니다.

NumericType 공용 구조체에 데이터 저장

숫자 형식 공용 구조체에 데이터 저장

참고 항목

참조

클래스, 구조체 및 공용 구조체

C++ 키워드

익명 공용 구조체

클래스 (C++)

struct (C++)