πŸ’£μƒμ„±μž 호좜 μˆœμ„œ#2

보물창고·2022λ…„ 8μ›” 30일
0

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

λͺ©λ‘ 보기
9/62
  • 이전 λ‹΅μ˜ κ²°κ³Ό
    : dog의 base 클래슀인 animal은 μƒμ„±μžλ₯Ό private μ²˜λ¦¬ν•˜κ³  있기 λ•Œλ¬Έμ—
    객체 dλ₯Ό 생성할 경우, animal μƒμ„±μžλ₯Ό μ§„μž…ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€κ³  있음.

  • 이전 포슀트 2번 μ½”λ“œ κ²°κ³Ό/
    :: 2번 μ½”λ“œλŠ” animal aλŠ” μ—λŸ¬, dog dλŠ” 이상 μ—†μŒ.

μ•Œμ•„μ•Ό ν•˜λŠ” κ°œλ…

: ν΄λž˜μŠ€μ— λ©€λ²„λ‘œ λ‹€λ₯Έ 객체가 μ‘΄μž¬ν•  경우, λ˜λŠ” λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†ν•˜κ³  μžˆμ„ 경우 ν•΄λ‹Ή 클래슀의 μƒμ„±μžμ— μ»΄νŒŒμΌλŸ¬κ°€ μ•”λ¬΅μ μœΌλ‘œ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ†“μŒ.

problem

: Point와 Rect 클래슀λ₯Ό λ§Œλ“€μž.
:: PointλŠ” λ””ν΄νŠΈμ™€ int,int μƒμ„±μž,
::: RectλŠ” λ””ν΄νŠΈ μƒμ„±μž λ§Œλ“€μž.

  • κ°€) Rectν΄λž˜μŠ€λŠ” Pointλ₯Ό μƒμ†ν•˜κ³  있기 λ•Œλ¬Έμ—,
    27번 μ€„μ˜ Rect μƒμ„±μžμ—μ„œλŠ” Point 클래슀의 λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μ μœΌλ‘œ ν˜ΈμΆœν•¨.
  • λ‚˜) 기반클래슀의 λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μ œκ±°ν•΄λ³΄μ•„λΌ.
    -> μ–΄λ–»κ²Œ 될까?
    --> Do it!
    : μ™œλƒν•˜λ©΄, μ»΄νŒŒμΌλŸ¬κ°€ λ³΄κΈ°μ—λŠ” μΈμžκ°€ μžˆλŠ” μƒμ„±μžκ°€ μžˆμ–΄μ„œ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄μ£Όμ§€ μ•ŠλŠ” κ²ƒμž„.

  • λ‹€) μ–΄λ–»κ²Œ ν•΄κ²°ν• κΊΌ??
    : μœ μ €κ°€ 직접 ν˜ΈμΆœμ‹œν‚€μž.

멀버 객체와 상속 을 λͺ¨λ‘ ν¬ν•¨ν•˜κΈ°

  • 어떀것이 λ¨Όμ € 호좜될까 ?
    -> λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•΄μ„œ 생각해보면, μ‰½κ²Œ μ–΄λ–€ μƒμ„±μžκ°€ λ¨Όμ € ν˜ΈμΆœν• μ§€ μ˜ˆμƒν•  수 μžˆλ‹€.
    : κ²°κ³Όλ₯Ό μ˜ˆμƒν•΄λ³΄κ³ , νƒ€μ΄ν•‘ν•΄μ„œ ν™•μΈν•΄λ³΄μž.

  • μ΄ν•΄ν•΄λ³΄μž.
    : νŒŒμƒν΄λž˜μŠ€μ˜ 멀버듀을 ν˜ΈμΆœν•˜κΈ° 전에 , μƒμ†λœ 기반의 멀버λ₯Ό λ¨Όμ € 처리λ₯Ό
    ν•΄μ•Ό 함.
    -> μ™œλƒν•˜λ©΄?
    νŒŒμƒν΄λž˜μŠ€λŠ” 기반 클래슀의 λ©”λͺ¨λ¦¬λ₯Ό 상속을 톡해 갖좔어진 μƒνƒœμ΄λ―€λ‘œ,
    -> 기반의 μƒμ„±μž 호좜, 멀버 μͺ½μ΄ μ΄ˆκΈ°ν™”λœ 후에, νŒŒμƒ μƒμ„±μžκ°€ 호좜됨.

  • κ²°κ³Ό
    : Base의 멀버 BM의 μƒμ„±μžκ°€ 호좜된 것은, derived d의 μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆκΈ° λ•Œλ¬Έμ—, derivedκ°€ μƒμ†ν•˜κ³  μžˆλŠ” Base의 μƒμ„±μžλ₯Ό λ¨Όμ € ν˜ΈμΆœν•˜κ²Œ 됨.
    그런데 Base의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κΈ° 전에,
    클래슀 Base의 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό ν˜•μ„±ν•˜κΈ° μœ„ν•΄ Base에 μžˆλŠ” 멀버듀을 μ΄ˆκΈ°ν™”κ°€ λ¨Όμ € 이루어진 κ²ƒμž„.

  • κ²°λ‘ 
    : μƒμ†λ˜μ–΄ μžˆλŠ” μƒνƒœμ—μ„œμ˜ μƒμ„±μž 호좜, 그리고 멀버 객체의 μƒμ„±μž ν˜ΈμΆœμ— μœ μ˜ν•˜μž.
    -> λ©”λͺ¨λ¦¬ ꡬ쑰가 μ–΄λ–€ μˆœμ„œλ‘œ λ§Œλ“€μ–΄μ§ˆμ§€λ₯Ό μƒκ°ν•˜λ©΄ 됨.

  • μƒμ„±μž ν˜ΈμΆœμˆœμ„œ

  1. 상속 클래슀의 멀버.
  2. 상속 클래슀의 μƒμ„±μž.
  3. νŒŒμƒ 클래슀의 멀버 객체
  4. νŒŒμƒ 클래슀의 μƒμ„±μž.
  • 생각해보기 240801
    : μœ„μ˜ λ‚΄μš©μ„ ν† λŒ€λ‘œ μ–΄λ–€ ν΄λž˜μŠ€κ°€ μƒμ†λ˜μ–΄ 있고, λ©€λ²„λ‘œ μ–΄λ–€ 객체λ₯Ό 가지고 μžˆλ‹€λ©΄, μƒμ„±μž ν˜ΈμΆœμ— μœ μ˜ν•΄μ•Ό ν•œλ‹€λŠ” 것을 λŠλ‚„μˆ˜ μžˆλ‹€.
    -> λ’€μ˜ ν¬μŠ€νŠΈμ—μ„œ ν•΄λ‹Ή λ‚΄μš©μ„ 가지고 μ˜ˆμ‹œμ½”λ“œλ‘œ ν™•μΈν•œλ‹€.

problem

: μœ„ κ·Έλ¦Όμ—μ„œ νŒŒμƒ μƒμ„±μžμ—μ„œ λͺ…μ‹œμ μœΌλ‘œ dm을 λ¨Όμ € ν˜ΈμΆœν•œ 후에,
기반 μƒμ„±μžλ₯Ό λͺ…μ‹œν•΄λ³΄μž.
-> κ²°λ‘  : μ΄λ ‡κ²Œ 해도, μ•ˆλ¨. λ©”λͺ¨λ¦¬μ— 놓인 μˆœμ„œλŒ€λ‘œ μƒμ„±μžκ°€ 호좜됨.

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

0개의 λŒ“κΈ€