✍️ 공용체와 열거체
: 구조체만큼 많이 사용하지는 않지만 C++에서 지원하는 복합데이터형 중 하나
: 서로 다른 데이터형을 한번에 한가지만 보관할 수 있음
#include <iostream>
using namespace std;
int main() {
union MyUnion {
int intVal;
long longVal;
float floatVal;
};
MyUnion test;
test.intVal = 3;
cout << test.intVal << endl; //3
test.longVal = 33;
cout << test.intVal << endl; //33
cout << test.longVal << endl; //33
test.floatVal = 3.3;
cout << test.intVal << endl; //1079194419
cout << test.longVal << endl; //1079194419
cout << test.floatVal << endl; //3.3
// 한번에 한가지 데이터형만 보관할 수 있기 때문에 숫자가 달라짐
return 0;
}
: 기호 상수를 만드는 것에 대한 또 다른 방법
#include <iostream>
using namespace std;
int main() {
enum spectrum { red, orange, yellow, green,
blue, violet, indigo, ultraviolet }; //열거자
/*
1. spectrum을 새로운 데이터형 이름으로 만듦
2. red, orange, yellow...등등 0부터 7까지 정수 값을 나타내는 기호 상수로 만듦
(red->0, orange->1, yellow->2..., ultraviolet->7)
*/
spectrum a = orange; // 열거체 선언
//a에는 사용된 열거자들의 값만 대입할 수 있음
cout << a << endl; //1
// 열거체의 특징: 사용된 열거자들을 기호상수로써 관리하기 때문에 산술연산을 적용할 수 없음
spectrum a = orange + yellow; // 불가능!
cout << a << endl;
// 열거자들을 정수형에 대입할 때는 int형으로 변환될 수 있음
int b;
b = blue;
b = blue + 3; // blue가 열거체 내에서 4를 의미하기 때문에 4+3의 값인 7이 변수 b에 저장됨
cout << b << endl; //7
/*
열거자는 기본적으로 0부터 시작해서 1씩 더해지는 정수가 자동으로 저장되지만
명시적으로 대입연산자 = 를 사용해서 값을 넣어줄 수도 있음
열거자들의 값을 초기화할 때는 반드시 정수여야만 하고 초기화 하지 않은 열거자들은 그 이전의 열거자의 값보다 1씩 더한 값을 가지게 됨
*/
enum spectrum { red = 0, orange = 2, yellow = 4, green,
blue, violet, indigo, ultraviolet }; // green은 5, blue는 6..., ultraviolet은 9
return 0;
}
정리
: 열거체를 새로 선언할 때는 미리 명시한 열거자들만 그 값에 대입할 수 있고, 열거자들 간의 산술연산은 허용되지 않음
그러나 int형 변수에 그 값을 대입하고자 할 때는 열거자들의 값은 int형 정수로 계산되어 대입됨