C++ 공용체 예제

C Gong Yongche Yeje



공용체는 공유 메모리 위치에 다양한 데이터 유형을 저장할 수 있는 C++의 특수 클래스 유형입니다. 일반적으로 각 부분이 메모리를 가져오는 구조와 달리 공용체는 서로 다른 데이터 조각이 동일한 메모리 위치를 사용할 수 있도록 합니다. 이러한 특성으로 인해 메모리 효율성이 중요하고 한 번에 멤버 중 하나만 액세스하면 되는 경우 공용체는 특히 유용합니다. 이 기사에서는 C++의 공용체 개념을 자세히 살펴보고 다양한 시나리오에서 공용체의 유용성을 보여주는 여러 예를 살펴보겠습니다.

통사론:

공용체는 사용자가 정의하는 유형으로, 공유 메모리 위치 내에 다양한 데이터 유형을 저장할 수 있습니다. 공용체를 사용하면 구조체와 동일한 구문을 따릅니다.







기본 구문은 다음과 같습니다.



노동 조합 조합 이름 {

// 멤버 선언

데이터 유형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++ 프로그래밍에 가져오는 효율성과 적응성을 강조합니다.