C++/C++ 이론

[C++] 구조체(struct) / 공용체(union) / 열거체(enum)

renne 2022. 7. 16. 10:40

구조체(struct)

 - 배열: 같은 데이터형의 집합

 - 구조체: 다른 데이터형이 허용되는 데이터의 집합

#include <iostream>
using namespace std;
int main(){
    struct Player{
        string name;
        float height;
    }A;
    A.name = "Sirius Black";	//구조체 멤버 연산자 '.'
    A.height = 186.7;
    
    Player B = {"Regulus Black", 176.7};	//초기화
    Player C = {};	//빈 값은 0으로 저장된다.
    Player D[2] = {{"James Potter", 188.5}, {"Remus Lupin", 181.3}};	//구조체 배열
    
    cout << A.name << "\t" << A.height << endl;
    cout << B.name << "\t" << B.height << endl;
    cout << C.name << "\t" << C.height << endl;
    cout << D[0].name << "\t" << D[0].height << endl;
    cout << D[1].name << "\t" << D[1].height << endl;
    return 0;
}

<실행 결과>
Sirius Black    186.7
Regulus Black   176.7
        0
James Potter    188.5
Remus Lupin     181.3

 

공용체(union)

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

#include <iostream>
using namespace std;
int main(){
    union Test{
        int intVal;
        long longVal;
    };
    
    Test test;
    test.intVal = 3;
    cout << test.intVal << endl;    	//3 출력
    
    test.longVal = 33;			//이전에 저장했던 데이터가 소실된다.
    cout << test.intVal << endl;    	//33 출력
    cout << test.longVal << endl;	//33 출력

    return 0;
}

 

열거체(enum)

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

 - 열거자들을 상수로 관리한다.

 - 열거자 간의 산술 연산은 지원되지 않는다.

#include <iostream>
using namespace std;
int main() {
    //spectrum을 새로운 데이터형 이름으로 만든다.
    //열거자들을 상수로서 관리한다.
    enum spectrum{red, orange, yellow, green, blue, violet};    //0, 1, 2, 3, 4, 5, 6

    spectrum a = red, b = orange, c = yellow;
    cout << a << endl;  //0
    cout << b << endl;  //1
    cout << c << endl;  //2
    //열거자 간의 산술 연산은 지원되지 않는다. ex) orange + yellow = 3 (x)

    //그러나, int형 변수에 열거자를 대입할 때, 열거자의 값은 int형 정수로 계산돼서 대입된다.
    int d = green + 3;  //3 + 3 = 6
    cout << d << endl;  //6

    enum week{mon = 1, tue = 3, wed = 5};   //열거자의 값을 명시적으로 정할 수 있다. (정수)
    cout << wed << endl;	//5

    return 0;
}