2021-04-26 c++ (enum2)

2021. 4. 26. 11:38카테고리 없음

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
//클래스 내부의 enum
class calender {
    public:
    enum Month {
        JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
    };
};
//일반적인 enum
enum Month {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
//강화된 enum class type
enum class Month {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
enum Math{
 INC,DEC  //DEC를 다른 의미로 생성했지만 위에 Month 클래스의 DEC와 구분이 불가능하다. 그래서 일반적인 enum 대신 enum class를 사용하는 것이다.
};

지금은 JAN이 1이라서 1,2,3,4 등의 열거값을 갖지만 만약 20으로 설정되면 뒤에 값들이 20,21,22,23 순으로 열거된다
enum함수는 헤더 파일에 넣는다.

int main() {
    //클래스 내부의 enum
    //calender::Month m = calender::Month::JAN; //뒤에 Month는 생략가능하다.

    //강화된 enum class type
    Month m = Month::JAN;
    int values = (int)m;

    switch (m)
    {
    case Month::JAN:
        printf("1월\n");
        break;
    case Month::FEB:
        printf("2월\n");
        break;
    case Month::MAR:
        printf("3월\n");
        break;
    case Month::APR:
        printf("4월\n");
        break;
    case Month::MAY:
        printf("5월\n");
        break;
    case Month::JUN:
        printf("6월\n");
        break;
    case Month::JUL:
        printf("7월\n");
        break;
    case Month::AUG:
        printf("8월\n");
        break;
    case Month::SEP:
        printf("9월\n");
        break;
    case Month::OCT:
        printf("10월\n");
        break;
    case Month::NOV:
        printf("11월\n");
        break;
    case Month::DEC:
        printf("12월\n");
        break;
    default:
        break;
    }
}
728x90