EX) ๋ชฌ์คํฐ ๊ตฌ์กฐ์ฒด์์ Attack ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋ชฌ์คํฐ A๋ Attack ํจ์๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , ๋ชฌ์คํฐ B๋ ๊ฐ์ Attack ํจ์๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๐ ๋ค์์ ๊ฐ์ฒด๊ฐ ๋ฉค๋ฒํจ์๋ฅผ ๊ณต์ ํ๋ ํํ
๋ค๋ง, ํจ์ ํธ์ถ์ ๊ฐ์ฒด์ ์ ๋ณด๊ฐ ์ ๋ฌ์ด ๋๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ์๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ ๋ฉค๋ฒํจ์๊ฐ ์กด์ฌํ๋ ํํ์ด๋ค.
๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด, ๋ฉค๋ฒ๋ณ์๋ ๊ฐ์ฒด ๋ด๋ถ์ ์กด์ฌํ์ง๋ง, ๋ฉค๋ฒํจ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๊ณต๊ฐ์ ๋ณ๋๋ก ์์นํ๋ค.
์ด ํจ์๊ฐ ์ ์๋ ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ด๋ฅผ ๊ณต์ ํ๋ ํํ๋ฅผ ๊ฐ์ง๋ค.
๐ฉ ๊ฐ์ํจ์ ํ ์ด๋ธ
์ค์ ํธ์ถ๋์ด์ผ ํ ํจ์์ ์์น์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํ ์ด๋ธ
ํ ๊ฐ ์ด์์ ๊ฐ์ํจ์(virtual ํจ์)๋ฅผ ํฌํจํ๋ ํด๋์ค์ ๋ํด์๋ ์ปดํ์ผ๋ฌ๊ฐ '๊ฐ์ํจ์ ํ ์ด๋ธ'์ด๋ผ๋ ๊ฒ์ ๋ง๋ ๋ค.
๋งค ํจ์ํธ์ถ์๋ง๋ค ์ด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค.
key : ํธ์ถํ๊ณ ์ ํ๋ ํจ์๋ฅผ ๊ตฌ๋ถ์ง์ด์ฃผ๋ ๊ตฌ๋ถ์์ ์ญํ
value : ๊ตฌ๋ถ์์ ํด๋นํ๋ ํจ์์ ์ฃผ์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ์ญํ
๐ ์ฆ, AAA ๊ฐ์ฒด์ Func() ํจ์๋ฅผ ํธ์ถํด์ผ ํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ํ์ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ฌ, 0x1024๋ฒ์ง์ ๋ฑ๋ก๋์ด ์๋ Func1 ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ ๊ฒ
BBB ํด๋์ค๋ AAA ํด๋์ค๋ฅผ ์์๋ฐ๋๋ฐ, ๊ฐ์ํจ์ ํ ์ด๋ธ์๋ AAA::Func1์ ๋ํ ์ ๋ณด๊ฐ ์์์ ์ฃผ๋ชฉํ์.
์ฆ, ์ค๋ฒ๋ผ์ด๋ฉ๋ ๊ฐ์ํจ์์ ์ฃผ์์ ๋ณด๋ ์ ๋ ํด๋์ค์ ๊ฐ์ํจ์ ํ ์ด๋ธ์ ํฌํจ๋์ง ์๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ฝ๋๊ฐ ์คํ๋๋ฉด, main ํจ์๊ฐ ์คํ๋๊ธฐ ์ , ์์ ํํ๋ก ๊ฐ์ํจ์ ํ ์ด๋ธ์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋๋ค.
๊ฐ์ํจ์ ํ ์ด๋ธ์ ๋ฉค๋ฒํจ์์ ํธ์ถ์ ์ฌ์ฉ๋๋ ์ผ์ข ์ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๊ด์์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋๋ค.
์ดํ, main ํจ์๊ฐ ํธ์ถ๋์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ๋๋ฉด, ์์ ๊ตฌ์กฐ์ ๊ฐ์ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ๋ค.
์ด์ ๊ฐ์ด AAA ๊ฐ์ฒด์๋ AAA ํด๋์ค์ ๊ฐ์ํจ์ ํ ์ด๋ธ์ ์ฃผ์ ๊ฐ์ด ์ ์ฅ๋๊ณ , BBB ๊ฐ์ฒด์๋ BBB ํด๋์ค์ ๊ฐ์ํจ์ ํ ์ด๋ธ์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋๋ผ, ๋ด๋ถ์ ์ผ๋ก ํ์์ ์ํด ์ฐธ์กฐ๋๋ ์ฃผ์๊ฐ์ด๋ค.
โ๏ธ ๊ฐ์ํจ์ ํ ์ด๋ธ์ ์ํ ์๋ ์ ํ
๊ฐ์ํจ์ ํ ์ด๋ธ ์์ฑ๋จ ๐ ์ด ํ ์ด๋ธ์ ์ฐธ์กฐํ์ฌ ํธ์ถ๋ ํจ์๊ฐ ๊ฒฐ์ ๋จ ๐ ์คํ์๋ ๊ฐ์
๊ทธ๋ฌ๋, ๊ทธ ์ฐจ์ด์ ์๋๊ฐ ๋งค์ฐ ์ ๊ณ , ๋ ์ด๋ฌํ ๋จ์ ์๋ ๋ถ๊ตฌํ๊ณ , ๊ฐ์ํจ์๋ ๋ง์ ์ฅ์ ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ์ ์ฉํ๊ฒ ํ์ฉ๋๊ณ ์๋ค.
๐ฉ ๋ค์ค์์
๋ ์ด์์ ํด๋์ค๋ฅผ ๋์์ ์์ํ๋ ๊ฒ์ผ๋ก, ๋ถ์ ์ ์ธ ์๊ฒฌ์ด ์ง๋ฐฐ์ ์ด๋ค. ๐ ๋งค์ฐ ์์ธ์ ์ผ๋ก, ์ ํ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํจ
ํนํ ๋์ผํ ์ด๋ฆ์ ๋ฉค๋ฒ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์, ๋์ผํ ์ด๋ฆ์ ํจ์๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ, ์ด ๋์ ์์ํ๋ ์์ ํด๋์ค์ ์๋ ํจ์๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ, ์ด๋ ํด๋์ค์ ์ ์๋ ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋์ง๋ฅผ ๋ช ์ํด์ผ ํ๋ค.
๐ ๊ฐ์ ์์
class MiddleDerivedOne : virtual Base
class MiddleDerivedTwo : virtual Base
์ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ์ ๊ฐ์ ์์์ ํ๊ฒ ๋๋ฉด, Base ํด๋์ค์ ์์ฑ์๋ฅผ 1๋ฒ๋ง ํธ์ถ๋๋ค.
cf. ๊ฐ์ ์์์ ํ์ง ์์ผ๋ฉด Base ํด๋์ค์ ๋ฉค๋ฒ๊ฐ 2๋ฒ ํฌํจ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฆ๋ง ๊ฐ์ง๊ณ SimpleFunc() ํจ์๋ฅผ ํธ์ถํ ์๋ ์๊ณ , ์ด๋ค ํด๋์ค๋ฅผ ํตํด ํธ์ถํ ๊ฒ์ธ์ง ๋ช ์ํด์ผ ํ๋ค.
MiddleFuncOne :: SimpleFunc();
MiddleFuncTwo :: SimpleFunc();
๊ฐ์์์์ ํ๊ฒ ๋๋ฉด ์ด๋ฆ๋ง์ผ๋ก ํธ์ถ ๊ฐ๋ฅํ๋ค.
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] String ํด๋์ค ๋์์ธ (0) | 2024.05.06 |
---|---|
[C++] ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ (0) | 2024.04.30 |
[C++] ์์๊ณผ ๋คํ์ฑ | ๊ฐ์ํจ์(virtual function) | ์ฐธ์กฐ์ (1) | 2024.04.26 |
[C++] ์์ (0) | 2024.04.23 |
[C++] ๋ณต์ฌ ์์ฑ์ | ๊น์ ๋ณต์ฌ์ ์์ ๋ณต์ฌ (0) | 2024.04.19 |