공용 구조체
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 공용 구조체에 데이터 저장