2019. 6. 12. 11:49ใPROGRAMMING/C & C++
1. ์ค๋ฒ๋ผ์ด๋ฉ (overriding)
๋ถ๋ชจ์ ๋ฉ์๋(๋ฉค๋ฒ ํจ์)๋ฅผ ์์ ํด๋์ค์๊ฒ ๋๊ฐ์ด ์์ฑํ๋ค.
๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ฒด์ ๋ฐ๋ผ ์ฌ์ ์ ํ๋ค.
(๋ชฉ์ - ํจ์ ์ฌ์ ์, ๋คํ์ฑ.)
(์ค๋ฒ๋ก๋ฉ : ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ธ์์ ๋ฐ๋ผ ์ฌ์ ์
๋ชฉ์ - ํจ์ ์ฌ์ ์)
์ค๋ฒ๋ก๋ฉ | ์ค๋ฒ๋ผ์ด๋ฉ | |
๋ฌธ ๋ฒ | ํจ์ ๋ฌธ๋ฒ | ํด๋์ค ๋ฌธ๋ฒ |
ํจ์ ๋ช | ๊ฐ์์ผ ์ฌ์ ์ | ๋ถ๋ชจ์ ๊ฒ๊ณผ ๊ฐ์์ผ ํ๋ค. |
์ธ์ ํ์ | ๋ฌ๋ผ์ผ ์ฌ์ ์ | ๋ถ๋ชจ์ ๊ฒ๊ณผ ๊ฐ์์ผ ํ๋ค. |
์ธ์ ๊ฐ์ | ๋ฌ๋ผ์ผ ์ฌ์ ์ | ๋ถ๋ชจ์ ๊ฒ๊ณผ ๊ฐ์์ผ ํ๋ค. |
๋ฐํ ํ์ | ์ฌ์ ์์ ์๋ฌด ์ฐ๊ด ์๋ค. | ๋ถ๋ชจ์ ๊ฒ๊ณผ ๊ฐ์์ผ ํ๋ค. |
๋ชฉ ์ | ํจ์ ์ฌ์ ์์ ๋คํ์ฑ |
๋ชฌ์คํฐ ํด๋์ค๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ์๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด์ ๊ฐ ๊ฐ์ฒด๋ณ๋ก
๊ฐ์ ์ด๋ฆ์ ํจ์๊ฐ ์ฌ์ ์ ๋๋ค.
(ํด๋์ค์ ๋คํ์ฑ : ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋์ผํ ๋ฉ์์ง๋ฅผ ํตํด, ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋ค.)
2. ๊ฐ์ฒด ํฌ์ธํฐ์ ๊ฐ์ฒด ๋ ํผ๋ฐ์ค
๋ถ๋ชจ ํ์ ์ ํฌ์ธํฐ๋ ๋ ํผ๋ฐ์ค๋ ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
ํฌ์ธํฐ๋ ๋ ํผ๋ฐ์ค ์ฐ์ฐ ์ ์ปดํ์ผ๋ฌ๋ ํฌ์ธํฐ๋ ๋ ํผ๋ฐ์ค ํ์ ์ผ๋ก๋ง ํ๋ณํด๋ฒ๋ฆฐ๋ค.
๋ฐ๋ผ์, CGameObject์ Attack() ํจ์๊ฐ ํธ์ถ๋๋ค.
์ด๋ฅผ ์ ์ ๋ฐ์ธ๋ฉ ์ด๋ผ๊ณ ํ๋ค.
[ ๋ฐ์ธ๋ฉ ]
ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ์์๋ค์ ์ฑ๊ฒฉ์ ๊ฒฐ์ ์ง์ด ์ฃผ๋ ๊ฒ.
[ ์ ์ ๋ฐ์ธ๋ฉ ]
- ์ปดํ์ผ ์์ ์ ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋๋ค.
- ์ปดํ์ผ ๋ ํ ๋ฒ ๊ฒฐ์ ๋ ์ฑ๊ฒฉ์ ๋ฐํ์ ๋ ๋ณํ ์ผ์ด ์๋ค.
(๋ฐํ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.)
ex) ์ ์ ๋ฐฐ์ด, ์ผ๋ฐ ๋ฉค๋ฒ ํจ์ ํธ์ถ.
[ ๋์ ๋ฐ์ธ๋ฉ ]
- ๋ฐํ์ ๋ ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋๋ค.
- ์ปดํ์ผ ์์ ์์ ๊ฒฐ์ ์ ๋ณด๋ฅํด๋์๋ค๊ฐ ๋ฐํ์ ๋ ๊ฒฐ์ ํ๋ค.
- ๋ฐํ์ ๋ ์ฑ๊ฒฉ์ ์ผ๋ง๋ ์ง ๋ณํ ์ ์๋ค.
(๋ฐํ์ ์๋๊ฐ ๋๋ ค์ง์ง๋ง, ํ๋ก๊ทธ๋จ์ด ์ ์ฐํด์ง๋ค.)
ex) ๋์ ๋ฐฐ์ด, ๊ฐ์ ํจ์ ํธ์ถ.
3. ๋์ ๋ฐ์ธ๋ฉ์ ์ํ ํค์๋ virtual
virtual ํค์๋๊ฐ ๋ถ์ผ๋ฉด,
์ปดํ์ผ ๋ ๋ฐ์ธ๋ฉ์ ๋ณด๋ฅํด๋์๋ค๊ฐ
๋ฐํ์ ๋ ์ค์ ๊ฐ์ฒด ๊ธฐ์ค์ผ๋ก ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋๋ค.
virtual ํค์๋๋ฅผ ๋ถ์ธ ๊ฒฐ๊ณผ,
๋์ ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋์ Player์ Attack() ํจ์๊ฐ ํธ์ถ๋์๋ค.
๋์ ๋ฐ์ธ๋ฉ์ ํตํด
๋ถ๋ชจํ์ ํฌ์ธํฐ๋ก ์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ ์๋ค.
(์๋ฉธ์์ ํธ์ถ ๋ํ ๋์ ๋ฐ์ธ๋ฉ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. -> ๊ฐ์ ์๋ฉธ์)
4. ๋คํ์ฑ์ ํตํด ์ป์ ์ ์๋ ์ด์
๋คํ์ฑ์ด ์๋ ๋๋ (๋ถ๋ชจ ํ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉ X) ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค.
๋คํ์ฑ์ผ ๋(๋ถ๋ชจํ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉ O)๋ ์ฝ๋๊ฐ ์ ์ฐํด์ง๋ค.
5. virtual์ ์๋ ์๋ฆฌ
ํด๋์ค ๋ด๋ถ์ virtual ํค์๋๊ฐ ํ๋ ์ด์ ์กด์ฌํ๋ค๋ฉด,
์ปดํ์ผ๋ฌ๋ ๊ฐ์ํจ์ ํฌ์ธํฐ(vfptr)์ ๊ฐ์ํจ์ ํ ์ด๋ธ(vftable)์ ๋ง๋ค์ด ๋๋๋ค.
ํด๋น ํด๋์ค๋ ๊ฐ์ํจ์ ํฌ์ธํฐ๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค.
๊ฐ์ํจ์ ํ ์ด๋ธ์๋ ์ค์ ๊ฐ์ฒด๊ฐ ํธ์ถํด์ผ ํ ๊ฐ์ํจ์๋ค์ ์์น ์ ๋ณด๋ค์ ๊ฐ๊ณ ์๋ ๋ฐฐ์ด์ด๋ค.
๊ฐ์ํจ์ ํฌ์ธํฐ๋ ๊ฐ์ํจ์ ํ ์ด๋ธ์ ์ฒซ ์์น๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค.
6. ์์ ๊ฐ์ํจ์์ ์ถ์ ํด๋์ค
์์ ๊ฐ์ํจ์๋
'ํจ์์ ๋ชธ์ฒด๊ฐ ์ ์๋์ง ์์ ํจ์'๋ฅผ ์๋ฏธํ๋ค.
์ถ์ ํด๋์ค๋
์์ ๊ฐ์ํจ์๊ฐ ํ๋ ์ด์์ด๋ผ๋ ์กด์ฌํ๋ ํด๋์ค๋ฅผ ๋งํ๋ค.
(์ถ์ ํด๋์ค๋ ๊ฐ์ฒดํํ ์ ์๋ค.)
์์ ๊ฐ์ํจ์์ ์ถ์ ํด๋์ค๋ฅผ ํตํด ๋ถ๋ชจ ํด๋์ค๋ ์์ ํ ์ถ์์ ์ธ ์กด์ฌ๊ฐ ๋๋ค.
CGameObject ํด๋์ค๋
์ถ์ ํด๋์ค๊ฐ ๋์์ผ๋ฏ๋ก, ๊ฐ์ฒดํํ ์์๊ฒ ๋์๋ค.
์์ ๊ฐ์ํจ์์ ์ถ์ ํด๋์ค๋ก ์ป์ ์ ์๋ ๋ ๊ฐ์ง ์ด์ ์ด ์๋ค.
1. ์๋ชป๋ ๊ฐ์ฒด ์์ฑ์ ๋ง์ ์ ์๋ ๊ฒ๋ค.
2. CGameObject์ Attack() ํจ์๋
CPlayer์ CMonster์ ์ ์๋ Attack() ํจ์๊ฐ ํธ์ถ๋๊ฒ ๋ ๋๋๋ฐ ์๋ฏธ๊ฐ ์์ ๋ฟ
์ค์ ๋ก ์คํ์ํค๋ ํจ์๊ฐ ์๋๋ฐ, ์ด๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ๋ช ์ํ ์ ์๋ค.
'PROGRAMMING > C & C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
22. [C++] ํ ํ๋ฆฟ (Template) (0) | 2019.06.18 |
---|---|
21. [C++] ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ (0) | 2019.06.13 |
19. [C++] ํด๋์ค ์์ (0) | 2019.06.11 |
18. [C++] ํด๋์ค ๋ณต์ฌ์์ฑ์ (0) | 2019.06.07 |
17. [C++] ํด๋์ค ์์ฑ์์ ์๋ฉธ์ (0) | 2019.06.06 |