03
main thema : ์์
๊ฐ ํด๋์ค ์ฝ์์ ๊ฒ์ ์บ๋ฆญํฐ ํด๋์ค?์ง์ ? ์ธ๋ฏํจ.
ex00
๋ชฉ์ : ์์์ ์ํ Base ํด๋์ค ClapTrap
์์ฑ.
- canonical form์์ฑ
- ๊ฐ ๊ฐ์ฒด๋ ๊ณตํต์ ์ผ๋ก ์ด๋ฆ(name_)์ ๊ฐ์ง.
- ๊ฐ ๊ฐ์ฒด๋ง๋ค ์ค์ ๋๋ ์ด๊ธฐ ์คํฏ(hitPoint_, energyPoint_, attackDamage_)์ด ๋ค๋ฅด๋ค
- protected์์ญ์ ๊ฐ ์ด๊ธฐ๊ฐ์ const static์ผ๋ก ์ ์ธํ์ฌ ๋ถ๋ชจํด๋์ค์๊ฒ์ ์์ ๋ฐ๊ฑฐ๋, ๊ฐ ํด๋์ค๋ง๋ค ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๊ฒ ํจ
- ๋๋จธ์ง ์์๋๋ ํด๋์ค๋ค์ด ๊ณต์ ํ๋ ์ธ์๋ protected์ ์ ์ธ.
ex01
๋ชฉ์ :
ClapTrap
๋ฅผ ์์ํ๋ScavTrap
์์ฑ.
ScavTrap
์ClapTrap
์ public์์ ํ๋ค.- ๋ค์์ ๋ค์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๋ค์ ex๋ถํฐ๋ virtual์์์ ํด์ผํ๋ค.
์์ ์ ๊ทผ ์ง์์.
์ด๋ค ์์ค์ผ๋ก ์์ ๋ฐ์์ง ๊ฒฐ์ ํ๋ค. ์์ ์ ๊ทผ ์ง์์์ ์์ค๋ณด๋ค ๋ฎ์ ์ ๊ทผ ์ ํ์๋ ์์์ ๊ทผ์์ ์์ค๋งํผ ์ฆ๊ฐํ ์ํ๋ก ์์ ๋ฐ๊ฒ ๋๋ค.
- ๋ถ๋ชจํด๋์ค์์
public
์ด๊ณ ,: private
์์ค์ผ๋ก ์์ ๋ฐ์ : ์์ํด๋์ค์์private
์์ค์ผ๋ก ์ฆ๊ฐํ ์ํ๋ก ์์๋ฐ๋๋ค. - ๋ถ๋ชจํด๋์ค์์
private
์ด๊ณ ,: public
์์ค์ผ๋ก ์์ ๋ฐ์ : ์์ํด๋์ค์์private
์ ์ง
๋ฐ๋ผ์ : public
์์ค ์์์ ๋ถ๋ชจํด๋์ค ๋ฉค๋ฒ๋ค์ ๊ทธ๋๋ก ์์๋ฐ๋๋ค.
ex02
๋ชฉ์ : ex02์ ๊ฐ๋ค. ClapTrap
๋ฅผ ์์ํ๋ FragTrap
์์ฑ.
ex03
๋ชฉ์ : ๋ค์ค์์์ ์ํ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ ํด๊ฒฐ.
virtual
https://www.youtube.com/watch?v=AImBeri4pJY&list=PLDV-cCQnUlIar6Wx3rkXHs7wbfmlz34Fz&index=1
https://www.sysnet.pe.kr/2/0/11164
์ด์๋ธ๋ฌ ์ ๋ฆฌ https://m.blog.naver.com/aaasssddd25/220901909436
์์(Inheritance)
์์์ ์ด์
- class relationship ์ ์
- code reuse
- class interface consistency : ์ผ๊ด์ ์ธ ์ธํฐํ์ด์ค ํด๋์ค๊ฐ ๊ตฌํ ๊ฐ๋ฅํด์ง๋ค.
- abstract class(๊ตฌํ ์์), interface(๊ตฌํ ์์) -> pure virtual class ๋ก ๊ตฌํ ๊ฐ๋ฅ.
- dynamic function binding -> virtual func, virtual table๋ก ๊ตฌํ ๊ฐ๋ฅ.
๊ณต๋ถํ ๋๋ ์ฃผ๋ก 1, 2๋ฒ์ ์ฃผ๋ก ์ด์ผ๊ธฐ ํ์ง๋ง, ์ค์ ์์์ ์ฌ์ฉํ์๋ ๋ํ๋๋ ์ด์ ์ 3, 4๊ฐ ๊ฐ์ฅ ํฌ๋ค.
์์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
๋ฐํ์ ๋คํ์ฑ
๋ฐํ์์ ์ข ๋ฃ
- ๋ฐํ์ ๋คํ์ฑ : =์๋ธํ์ ๋คํ์ฑ. ๋ฐํ์์ ~๊ฐ ๊ฒฐ์ ๋จ. ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ~~ํฌ์ธํฐ๋ฅผ ํตํดโฆ
(๋๋จธ์ง ๋คํ์ฑ์ (์ฌ๊ธฐ์)[https://github.com/utilForever/modern-cpp-tutorial/blob/master/Articles/The%20Four%20Polymorphisms%20in%20C%2B%2B.md] ์ฐธ์กฐ) ๋ฐํ์์ค์
ex03.1 virtualํค์๋์ ๊ฐ์ํจ์ ํ ์ด๋ธ
virtualํค์๋๊ฐ ๋ถ์ ํจ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(overriding)๋ ๊ฒ๋ค ์ค ํ๋๋ก ๋์ ๋ฐ์ธ๋ฉ(๋ฐํ์์ ๊ฒฐ์ )๋๋ค. ์ด๋ ๋ฐ์ธ๋ฉ๋๋ ํจ์๋ ์ ์บ์คํ ์ฌ๋ถ์ ์๊ด ์์ด ๊ฐ์ฅ ๋์ค์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๊ฒ์ด๋ค.
ex03.2 ๊ฐ์ํจ์ ํ ์ด๋ธ
์ด๋ค ํจ์๋ก ๋์ ๋ฐ์ธ๋ฉํด์ผํ๋์ง์ ๋ํ ์ ๋ณด๋ virtual tables(์ดํ vt)์ด๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ๋๋ค. vt๋ ํด๋น ์ธ์คํด์ค(๊ฐ์ฒด)๋ฐ๋ก ์์ ์์นํ๋ฉฐ, ํด๋์ค์ ํจ์ ํธ์ถ ์ ์ vt๋ฅผ ์ฐธ๊ณ ํ์ฌ vt์ ์์ผ๋ฉด table์ด ๊ฐ๋ฅดํค๋ ๊ณณ์ ํจ์๋ฅผ ์ฐ๊ฒฐ(bind)ํ๋ค. ์ด๋ฌํ ํน์ฑ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ(์ค๋ฒํค๋)๊ฐ ๋ฐ์ํ๋ฏ๋ก, virtual์ ๋จ๋ฐํ๋๊ฑด ์ข์ง ์๋ค.
ex03.3 ๋ค์ค ์์๊ณผ ๊ฐ์ ์์
๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ค์์์ ์ง์ํ๋๊ฒ ๋ง๋ค. ๋ค์ค์์์ ๊ณตํต๋ถ๋ชจ๊ฐ ์๋ค๋ฉด ์ด๋ค ์ชฝ์ ๋ถ๋ชจ๋ฅผ ํธ์ถํ ์ง ๋ชจ๋ฅด๋ ๋ชจํธ์ฑ์ด ์๊ธด๋ค. ๊ทธ๋ฆฌ๊ณ ::(๋ฒ์์ง์ ์ฐ์ฐ์)๋ฅผ ํตํด ๋ชจํธ์ฑ์ ์ ๊ฑฐํ๋๋ผ๋ ์ค๋ณต๋๋ ๋ด์ฉ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋๊ฒ ์์์ ๋ฐ์๋ virtualํค์๋๋ฅผ ๋ถ์ฌ์ ๊ฐ์์์ ๋ฐ๋ ๊ฒ์ด๋ค.
๊ฐ์์์ ํ๊ฒ ๋๋ฉด ๊ณตํต ๋ถ๋ชจ(์์์ classA)๋ฅผ ํ๋๋ง ์ธ์ํ๊ฒ ํ์ฌ(์ ์ด๋ฏธ์ง ์ ์ ) ํ๋๋ง ์์ฑํ๊ฒ ํ๋ค.
๊ฐ์ฅ ํ์คํ๊ฑด ๊ทธ๋ฅ ๋ค์ค์์์ ์ต๋ํ ํผํ๋๊ฒ์ด๋ค.