C++
C++ 공용체와 열거체
윤주승
2025. 3. 18. 16:47
#include <iostream>
#include <cstring>
using namespace std;
int main() {
// 공용체(union)
union MyUnion {
int intVal;
long longVal;
float floatVal;
};
MyUnion test;
test.intVal = 3;
cout << test.intVal << endl;
test.longVal = 33;
cout << test.intVal << endl;
cout << test.longVal << endl;
test.floatVal = 3.3;
cout << test.intVal << endl;
cout << test.longVal << endl;
cout << test.floatVal << endl;
return 0;
}
union은 모든 멤버가 같은 메모리 공간을 공유한다.
이는 한 멤버를 저장하면 기존 값이 덮어 씌워진다.
기존 구조체는 test.longVal에 33을 저장하고 다음 두줄을 출력하면 3과 33이 출력됐을 것이다.
그러나 공용체에서 값을 33으로 초기화했기때문에 그 다음출력에서도 33이란 값이 출력되는 것이다.
floatVal을 3.3으로 초기화하고, test.intVal과 test.longVal을 출력할때 이상한값이 나오는 이유는 둘의 자료형이 다르기 때문이다.
공용체는 가장 마지막으로 초기화 한 값으로 덮어씌워진다.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
// 열거체(enum)
// 기호 상수를 만드는 것에 대한 또다른 방법.
enum spectrum { red, orange, yellow, green, blue, violet, indigo, ultraviolet};
// 열거체는 열거자들의 값만 대입할 수 있다.
spectrum a = orange;
cout << a << endl;
return 0;
}
a에 orange를 대입하고 a값을 출력한 결과이다. 배열의 두번째에 위치하기때문에 1이 출력된다.
열거체의 특징이 기호 상수로 표현하기때문에 산술연산을 사용할 수 없다.
int b;
b = blue;
b = blue + 3;
단, 위와같이 열거자를 사용하면 산술 연산 사용이 가능하다. blue는 배열 4이고, 3칸을 더한 7번째 자리에 해당하는 7이 출력된다.