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이 출력된다.