#4 [C++] 공용체와 열거체

김보민·2023년 3월 4일
0

C++

목록 보기
4/5

✍️ 공용체와 열거체
: 구조체만큼 많이 사용하지는 않지만 C++에서 지원하는 복합데이터형 중 하나

공용체(union)

: 서로 다른 데이터형을 한번에 한가지만 보관할 수 있음

#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;
}

열거체(enum)

: 기호 상수를 만드는 것에 대한 또 다른 방법

#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형 정수로 계산되어 대입됨

0개의 댓글