[c++] enumeration (열거체) 본문

객체지향프로그래밍 (C++)

[c++] enumeration (열거체)

미니모아 2020. 7. 2. 15:06
반응형

 

struct Character{
    int jobType; //0 :강령술사, 1: 야만용사, 2: 마법사
}

int main(){
    Character c;
    c.jobType = 1;
    if(c.jobType == 2){
        cout << "비전격류!" << endl;
    }
}
  1. 산술연산 불가 , 정수 대입 불가

    enum Color{RED,GREEN,BLUE,YELLOW};
    int main() {
     Color c1 = RED;
     c1 = GREEN + BLUE; 
     c1 = c1 + 2;
     return 0;
    }
  2. 반대의 경우 산술 연산과 할당이 가능

    int n = BLUE;
    int o = GREEN + BLUE;
    cout << n << endl;
    cout << o << endl;
    
  1. 명시적 Casting 후 대입 가능
//Color c3 = (Color)2;
Color c3 = (Color)1000; // 해당하는 기호가 없으므로 모르는 값이 나옴
cout << c3 << endl;
  1. 문제점
    다른 열거체임에도 같은 기호를 사용할 수 없다.
    enum Java {PASS,FAIL};  
    enum Python {PASS,FAIL};
    

 

  1. 문제 해결

    • namespace

      namespace sophomore {
      enum Java { PASS, FAIL };
      }
      namespace freshman {
        enum Python { PASS, FAIL };
      
      }
    • 열거체 클래스 (C++ ver 11 이상)

      enum class Java { PASS, FAIL };
      enum class Python { PASS, FAIL };

      old school vs new

      enum class Java { PASS, FAIL };
      enum class Python { PASS, FAIL };
      enum class Cplusplus { PASS, FAIL };
      
      int main() {
        Cplusplus c = Cplusplus::PASS;
        switch (c) {
        case Cplusplus::PASS:
        //case 0:
            cout << "합격";
            break;
        case Cplusplus::FAIL:
            cout << "재수강!";
            break;
        }
        return 0;
      }
반응형
Comments