728x90
공용체
공용체(union)는 서로 다른 데이터형을 한번에 한가지만 보관할 수 있는 데이터 형식이다.
구조체는 int형과 long형, double형을 한번에 보관할 수 있지만 공용체는 어느 하나만 보관할 수 있다.
구문은 구조체와 같지만 의미가 다르다.
union one4all
{
int int_val;
long long_val;
double double_val;
};
이 경우 one4all은 모든 형을 보관할 수 있지만 어느 순간에는 하나만 보관이 가능하다.
one4all pail;
pail.int_val = 15; // int형을 저장
cout << pail.int_val;
pail.doubal_val = 1.38; // double형을 저장, int형 값은 소실
cout << pail.double_val;
공용체는 한번에 하나의 값만 보관할 수 있으니 가장 큰 멤버를 보관할 수 있을 만큼의 공간이 필요하다.
여러가지 데이터형을 사용할 수는 있지만 이들을 동시에 사용할 수 없을 때, 공용체를 사용하면 메모리를 절약할 수 있다.
열거체
C++의 enum기능은 const를 사용하여 기호 상수를 만드는 것에 대한 또 다른 방법을 제공한다.
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
- spectrum을 새로운 데이터형의 이름으로 만든다. struct형 변수를 구조체라 부르듯, enum형 변수는 열거체(enumeration)라고 부른다.
- red, orange, yellow ... 등을 0~7까지의 정수 값을 각각 나타내는 기호상수로 만들고 이 상수들을 열거자(enumerator)라고 부른다.
아래 예시를 참고해보자
spectrum band;
// 맞는 구문
band = blue; // blue는 열거자
band = orange;
int color = blue; // spectrum형이 int형으로 승급된다.
color = 3 + red; // red가 int형으로 변환된다.
// 틀린 구문
band = 2000; // 2000은 열거자가 아니다.
++band;
band = orange + red; // 안된다.
band = 3; // int형이 spectrum형으로 변환되지 않는다.
band = orange + red는 산술 수식에서 정수로 변환되서 1+0으로 계산되지만 int형은 spectrum 형으로 변환될 수 없기 때문에 안되는 것!
열거자의 값을 명시적으로 지정할 수 도 있다.
enum bits {one = 1, two = 2, ten =10 , three};
이 경우 뒤에 오는 열거자는 바로 앞의 열거자의 값보다 1크다. three는 11이다.
myflag = bits(7);
bits는 1~11까지 있으니 열거자 값은 없지만 열거체가 정의하는 범위 안에 들어가 있으니 올바른 구문이 된다.
728x90
'Study > C++' 카테고리의 다른 글
[C++]04.7 복합데이터형 - 포인터와 메모리 해제 (0) | 2023.03.31 |
---|---|
[C++]04.4 복합데이터형 - 구조체 (0) | 2023.03.17 |
[C++]04.3 복합데이터형 - String클래스 (0) | 2023.03.10 |
[C++]04.2 복합데이터형 - 문자열 (0) | 2023.03.09 |
[C++]04.1 복합데이터형 - 배열 (0) | 2023.03.09 |