πŸ˜Šμ½”λ”© κ·œμΉ™ : enum class 그리고 νƒ€μž… 지정.

보물창고·2022λ…„ 9μ›” 1일
0

c++Intermediate μ½”λ“œλˆ„λ¦¬

λͺ©λ‘ 보기
22/62
post-thumbnail
  • μ—…λ°μ΄νŠΈ 240315

enum class

: namespace 처럼 ν™•μ‹€ν•œ μ†Œμ†μ„ μ£ΌλŠ” enum λ¬Έ

  • μ•”μ‹œμ  ν˜•λ³€ν™˜ λ˜μ§€ μ•ŠμŒ.
  • μ†Œμ†μœΌλ‘œ μΈν•œ 이름쀑볡이 λ°œμƒν•˜μ§€ μ•ŠμŒ.

κΈ°μ‘΄ enum

  • 1) νƒ€μž…μ˜ 이름, μ†Œμ† 없이 μ•„λ¬΄λ°μ„œλ‚˜ μ‚¬μš©μ΄ κ°€λŠ₯함.
    -> μ•”μ‹œμ μœΌλ‘œ ν˜•λ³€ν™˜λ˜λŠ” κ²ƒμž„.
    -> μ½”λ“œ κ°€μ‹œμ„±μ— λ§ν¬λ˜μ§€ λͺ»ν•¨.

  • 2) enum의 λ©€λ²„λ‘œ μž‘μ„±ν•œ ν›„, λ³€μˆ˜λ‘œ λ™μΌν•œ enum의 멀버 μ΄λ¦„μœΌλ‘œ μž‘μ„±ν•  수 있음. (μ•„λž˜ μ˜ˆμ‹œ μ½”λ“œμžˆλ‹€.)
    : μ»΄νŒŒμΌμ‹œ λͺ¨ν˜Έμ„± 문제 λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ°, μœ μ €κ°€ λ³΄κΈ°μ—λŠ” 음... 뭘까 μƒκ°ν•˜κ²Œ λ§Œλ“ λ‹€.

  • μ•„λž˜ μ½”λ“œλ₯Ό 보면, Color::red λŠ” 1인데 , main에 red λ³€μˆ˜κ°€ μžˆλ‹€...
    이와 같은 κ²½μš°μ— μ»΄νŒŒμΌλŸ¬λŠ” μ–΄λ–€ λ†ˆμ„ μ„ νƒν• κΉŒ???

enum Color { red = 1 }
    int main()
    {
     int red = 2;
     int n3 = red; // ????? 
    
    }

-> λΉŒλ“œν•΄λ³΄λ©΄, 이상없고???
μ‹€ν–‰ν–ˆμ„ λ•Œ, μ „μ—­ 곡간에 μžˆλŠ” enum이 μ•„λ‹ˆλΌ main에 μžˆλŠ” redκ°€ 좜λ ₯됨.
(즉 쒀더 κ°€κΉŒμ΄ μžˆλŠ” λ†ˆμ΄ μ„ νƒλ˜μ—ˆλ‹€.)

  • 그러면 μ΄λ ‡κ²ŒλŠ”???
    : enum으둜 λ¬Άμ—ˆμ§€λ§Œ, mainμ—μ„œ λ³΄κΈ°μ—λŠ” μ•”μ‹œμ  ν˜•λ³€ν™˜μœΌλ‘œ λ™μΌν•œ 데이터 νƒ€μž…μœΌλ‘œ λ³Έλ‹€λŠ” 것을 확인할 수 μžˆλ‹€.

  • 그래?? 그럼 μ§„μ§œ νƒ€μž…μ€ 뭘까???!!
    μ§„μ§œ νƒ€μž…μ€ 이렇닀. 정말 μ•”μ‹œμ  ν˜•λ³€ν™˜ μ²˜λ¦¬λ¨μ„ 확인할 수 μžˆλ‹€.


enum class

  • enum 보닀 μ—…κ·Έλ ˆμ΄λ“œ 된 λ‚΄μš©
    : 이름 μ€‘λ³΅λ°œμƒν•˜μ§€ μ•ŠμŒ.
    : ν™•μ‹€ν•œ μ†Œμ†κ°μ„ μ•Œ 수 있음.
    : μ „λ°© 선언이 κ°€λŠ₯함.
    -> μ΄νŽ™ν‹°λΈŒ λͺ¨λ˜ c++ ν•­λͺ© 10 λ‚΄μš©.
    https://blockdmask.tistory.com/405
  • νŠΉμ§•
    • 1) namespace 처럼 enum class의 이름을 λͺ…μ‹œν•΄μ•Ό 함
    • 2) νƒ€μž…μ€ enum 클래슀 νƒ€μž…μœΌλ‘œ 결정됨.
      - int ν˜•μ΄λ‚˜ μ›ν˜•μœΌλ‘œ λ³€κ²½ν• λ•ŒλŠ” λ°˜λ“œμ‹œ ν˜•λ³€ν™˜μ„ ν•΄μ•Ό 함.
      -> μ•„λž˜ μ½”λ“œλ₯Ό 보면, μ•”μ‹œμ  ν˜•λ³€ν™˜μ΄ λΆˆκ°€ν•˜λ‹€λŠ” 것을 확인할 수 μžˆλ‹€.
      -> λ°˜λ“œμ‹œ 24번처럼 μΊμŠ€νŒ…μ„ ν•΄μ•Ό 함.
  • 3) μš”μ†Œμ˜ νƒ€μž…μ„ 지정할 수 있음.
    - νƒ€μž…μ„ 확인해보면..
    : char둜 μž‘μ„±ν•œκ²ƒμ˜ μ˜λ―ΈλŠ” μš”μ†Œλ“€μ˜ μžλ£Œν˜•μ„ char둜 μ„€μ •ν•˜κ² λ‹€λŠ” μ˜λ―Έμž„.
  • μ•„λž˜ 그림은 잘λͺ»λœ 언더바 tλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„μ„œ μ•„λž˜μ™€ 같이 좜λ ₯됨.

  • μ΄λ ‡κ²Œ ν•΄μ•Ό ν•œλ‹€.
    -> enum class 의 μš”μ†Œλ“€μ˜ type이 char둜 정해진 것을 확인할 수 μžˆλ‹€.

  • char둜 받아보렀고 ν–ˆλŠ”λ°, 였λ₯˜ λ°œμƒν•¨ .
    -> 이 λ•Œλ„ μΊμŠ€νŒ…μ„ ν•΄μ•Ό ν•œλ‹€.

μž¬λ°ŒλŠ” 짓거리λ₯Ό ν•΄λ³΄μž.

  • char 둜 νƒ€μž… μ§€μ •ν•œ λ‹€μŒμ— INT_MAX κ°’ λ„£κ³  좜λ ₯해보면???
    -> 일단은 cout << μ—°μ‚°μžκ°€ μ—†μ–΄μ„œ μ—λŸ¬λ°œμƒ.

  • 그리고 char λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ INTMAX μ—¬μ„œ -1둜 좜λ ₯λœλ‹€....

κ²°λ‘ 

enumμ—μ„œ enum classλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž!
그리고 κ°€λŠ₯ν•˜λ©΄ enum class : char νƒ€μž… μ§€μ •ν•΄μ„œ λ©”λͺ¨λ¦¬ μ‘°κΈˆμ΄λΌλ„ μ€„μ΄μž.

profile
πŸ”₯πŸ”₯πŸ”₯

0개의 λŒ“κΈ€