통사론:
공용체는 사용자가 정의하는 유형으로, 공유 메모리 위치 내에 다양한 데이터 유형을 저장할 수 있습니다. 공용체를 사용하면 구조체와 동일한 구문을 따릅니다.
기본 구문은 다음과 같습니다.
노동 조합 조합 이름 {
// 멤버 선언
데이터 유형1 멤버1 ;
데이터 유형2 멤버2 ;
//...
} ;
여기서 'UnionName'은 이 특정 사용자 정의 유형을 참조하기 위한 고유한 이름을 제공하는 공용체의 식별자 역할을 합니다. 조합원의 데이터 유형은 'DataType1', 'DataType2' 등으로 표시됩니다. 이러한 데이터 유형은 공용체 내에 저장될 수 있는 다양한 유형의 정보를 나타냅니다. 'member1', 'member2' 등과 같은 이름으로 지정된 Union 내의 각 구성원은 고유한 데이터 조각을 나타냅니다.
이제 우리는 기본 구문을 이해했습니다. 이제 이를 더 잘 이해하기 위해 몇 가지 사례를 사용해 보겠습니다.
예 1: 기본 Union 사용법
첫 번째 예는 C++에서 공용체의 기본 활용을 보여주며 단일 구조 내에서 다양한 데이터 유형 간에 메모리 공간을 공유하는 방법을 보여줍니다.
예는 다음과 같습니다.
#include
네임스페이스 표준 사용 ;
노동 조합 ArrayUnion {
정수 intArray [ 5 ] ;
뜨다 floatArray [ 5 ] ;
} ;
정수 기본 ( ) {
ArrayUnion arrayUnion ;
~을 위한 ( 정수 나 = 0 ; 나 < 5 ; ++ 나 ) {
arrayUnion. intArray [ 나 ] = 나 * 2 ;
}
시합 << '정수 배열:' ;
~을 위한 ( 정수 나 = 0 ; 나 < 5 ; ++ 나 ) {
시합 << ' ' << arrayUnion. intArray [ 나 ] ;
}
시합 << 끝 ;
~을 위한 ( 정수 나 = 0 ; 나 < 5 ; ++ 나 ) {
arrayUnion. floatArray [ 나 ] = 나 * 1.5f ;
}
시합 << '부동 배열:' ;
~을 위한 ( 정수 나 = 0 ; 나 < 5 ; ++ 나 ) {
시합 << ' ' << arrayUnion. floatArray [ 나 ] ;
}
시합 << 끝 ;
반품 0 ;
}
이 C++ 코드 조각에서는 정수(intValue), 부동 소수점 숫자(floatValue) 및 문자(charValue)의 세 가지 데이터 멤버를 통합하는 'MyUnion'이라는 공용체를 활용합니다. 노동조합의 기억 공간 공유 능력으로 인해 특정 시점에 이들 회원 중 단 한 명만 활동할 수 있습니다.
'main' 함수 내에서 'myUnion'이라는 공용체의 인스턴스를 선언합니다. 먼저 정수 멤버의 값을 42로 설정하고 'cout'을 사용하여 인쇄합니다. 그런 다음 부동 소수점 값 3.14를 'floatValue' 멤버에 할당하고 이를 인쇄합니다. 마지막으로 문자 'A'를 'charValue' 멤버에 할당하고 인쇄합니다. 모든 조합원은 동일한 메모리 위치를 공유하므로 한 조합원을 변경하면 다른 조합원의 가치에 영향을 미칠 수 있다는 점을 기억하는 것이 중요합니다. 코드는 성공적인 실행을 의미하는 0을 반환하여 종료됩니다.
예 2: 구조체와의 결합
구조체는 사용자가 하나의 통합된 이름으로 다양한 유형의 변수를 결합하기 위해 생성할 수 있는 C++의 데이터 유형입니다. 공용체와 구조체를 결합하는 것은 다양한 유형의 데이터를 보유할 수 있고 각 유형이 특정 필드와 연결되는 데이터 구조를 생성하려는 경우 유용할 수 있습니다. 이 페어링을 통해 다양한 표현을 특징으로 하는 복잡한 데이터 구조를 개발할 수 있습니다.
다음은 C++의 구조체 내에서 공용체를 사용하는 예입니다.
#include네임스페이스 표준 사용 ;
구조체 가리키다 {
정수 s1 ;
정수 s2 ;
} ;
노동 조합 모양 {
정수 측면 ;
뜨다 반지름 ;
포인트 중심 ;
} ;
정수 기본 ( ) {
모양 모양 ;
모양. 측면 = 5 ;
시합 << '측면: ' << 모양. 측면 << 끝 ;
모양. 반지름 = 6.0f ;
시합 << '반경: ' << 모양. 반지름 << 끝 ;
모양. 센터 = { 10 , 이십 } ;
시합 << '가운데: (' << 모양. 센터 . s1 << ', ' << 모양. 센터 . s2 << ')' << 끝 ;
반품 0 ;
}
이 코드에서는 공용체와 구조체를 사용하여 기하학적 모양의 다양한 측면을 나타내는 C++ 프로그램을 정의합니다. 먼저 2D 공간에서 점의 좌표를 나타내는 두 개의 정수 멤버 's1'과 's2'로 구성된 'Point' 구조를 선언합니다. 그런 다음 'sides' 정수, 'radius' 부동 소수점 및 'center'라는 'Point' 구조체의 세 멤버로 구성된 'Shape'라는 'union'을 정의합니다. 'main' 함수로 이동하여 'shape'라는 'Shape' 개체를 인스턴스화합니다. 그런 다음 다양한 구성원에게 가치를 할당하여 조합의 다양성을 보여줍니다. 처음에는 면 수를 5로 설정하고 결과를 인쇄합니다. 다음으로 모양에 반경 6.0을 할당하고 반경을 출력합니다. 마지막으로 좌표 (10, 20)가 있는 중심점을 모양에 할당하고 중심 좌표를 인쇄합니다.
예제 3: Enum을 사용한 결합
C++에서 열거형(일반적으로 열거형이라고 함)은 명명된 정수 상수 컬렉션을 정의하는 목적으로 사용됩니다. 열거형과 공용체를 결합하는 것은 각각 특정 열거형 값과 연관된 다양한 유형을 취할 수 있는 변수를 나타내려는 시나리오에서 유용할 수 있습니다.
예는 다음과 같습니다.
#include네임스페이스 표준 사용 ;
열거형 데이터 형식 {
정수 ,
뜨다 ,
숯
} ;
노동 조합 데이터값 {
정수 정수값 ;
뜨다 float값 ;
숯 char값 ;
} ;
구조체 데이터 {
데이터 유형 유형 ;
데이터값 값 ;
} ;
정수 기본 ( )
{
데이터 데이터1 , 데이터2 , 데이터3 ;
데이터1. 유형 = 정수 ;
데이터1. 값 . 정수값 = 42 ;
데이터2. 유형 = 뜨다 ;
데이터2. 값 . float값 = 3.14f ;
데이터3. 유형 = 숯 ;
데이터3. 값 . char값 = 'ㅏ' ;
시합 << '데이터 1: ' << 데이터1. 값 . 정수값 << 끝 ;
시합 << '데이터 2: ' << 데이터2. 값 . float값 << 끝 ;
시합 << '데이터 3: ' << 데이터3. 값 . char값 << 끝 ;
반품 0 ;
}
이 예에서는 열거형, 공용체 및 구조체를 활용하여 다양한 유형의 값을 보유할 수 있는 유연한 데이터 구조를 만드는 프로그램이 있습니다. 'DataType' 열거형은 INTEGER, FLOAT 및 CHAR의 세 가지 기본 데이터 유형을 나타내기 위해 정의됩니다. 열거형은 명명된 정수 상수 집합을 제공하여 코드 가독성과 유지 관리성을 향상시킵니다.
그런 다음 char 유형의 'charValue', float 유형의 'floatValue' 및 int 유형의 'intValue'라는 세 가지 멤버로 'DataValue'라는 공용체를 만듭니다. 공용체를 사용하면 이러한 멤버는 공용체에서 고유한 유형의 값을 상호 교환적으로 수용할 수 있도록 하는 공통 메모리 위치를 공유합니다. 그런 다음 'type'이라는 'DataType' 열거자와 'value'라는 'DataValue' 공용체라는 두 멤버로 구성된 'Data' 구조체가 생성됩니다. 이 구조체를 사용하면 데이터 유형을 해당 값과 연관시켜 구조화된 표현을 제공할 수 있습니다.
'main' 함수에서는 'Data' 구조체의 세 가지 인스턴스('data1', 'data2' 및 'data3')를 인스턴스화합니다. 데이터 유형을 지정하고 공용체 내에서 적절한 값을 설정하여 이러한 인스턴스에 값을 할당합니다. 예를 들어, 'data1'에는 값 42의 INTEGER 유형이 할당됩니다. 마지막으로 'cout' 문을 사용하여 각 'Data' 인스턴스에 저장된 값을 인쇄합니다. 프로그램은 'data1'의 정수 값, 'data2'의 부동 소수점 값, 'data3'의 문자 값을 출력합니다.
이 예에서는 열거형, 공용체 및 구조체를 결합하여 C++에서 다양하고 형식이 안전한 데이터 표현을 만드는 방법을 보여줍니다.
결론
C++ 공용체는 단일 메모리 공간 내에서 다양한 데이터 유형을 관리하기 위한 강력하고 유연한 메커니즘을 제공합니다. 이 기사에 설명된 사례는 다양한 시나리오를 처리하는 데 있어서 노동조합의 적응성과 효율성을 강조합니다. 데이터 유형의 상호 교환 가능성을 보여주는 기본적인 사용부터 구조 및 열거형을 포함하는 보다 복잡한 애플리케이션에 이르기까지 이러한 예는 공용체가 C++ 프로그래밍에 가져오는 효율성과 적응성을 강조합니다.