Dynamic Binding (๋์ ๋ฐ์ธ๋ฉ)
๊ทธ๋ฐ๋ฐ, ์ฐ๋ฆฌ๊ฐ ๋ ํด๋์ค๊ฐ ์์๊ด๊ณ์ ์๋ค๋ ๊ฒ์ ์๋ค๋ฉด, ์ด ๋ฉค๋ฒํจ์๋ฅผ ์๋์ผ๋ก ๋ฌถ์ด์ค ์๋ ์์๊น?
์ด์ ย override
ย ,ย virtual
ย ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ์ ์๋ค.
Base::f()
Base::vf()
Base::f()
Derived::vf()
Program ended with exit code: 0
Base ํด๋์ค์ ์ฃผ์๋ฅผ ๋ด๋ ํฌ์ธํฐ ๋ณ์ย pBase
ย ๋ฅผ ์ ์ธํ๊ณ , ์ด ์ฃผ์์ย base
ย ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ด๊ณ ์, ๋ ๋ฉค๋ฒํจ์๋ฅผ ํธ์ถํ๋ ๋น์ฐํ Base ํด๋์ค์ ํจ์๋ค์ด ํธ์ถ๋๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ,ย derived
ย ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ด์ผ๋ฉด (๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค๋ฅผ ๋ฃ์ ์๋ ์๋ค๊ณ ์๊ธ์์ ์ค๋ช
ํ๋ค.) ๋ฉค๋ฒํจ์์ย Base์ f(), Derived ์ vf()ย ๊ฐ ํธ์ถ๋์์์ ์ ์ ์๋ค.
์ฆ, ํด๋น ๊ฐ์ฒด์ ๋ฉค๋ฒํจ์๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก๋ Base ์์ ๊ฐ์ ธ์จ๋ค.
ํ์ง๋ง Virtual ์ ์ธ์ด ๋์ด ์๋ค๋ฉด, ์ด๋ค ๊ฐ์ฒด์ธ์ง ํ์ ํ ๊ทธ ๊ฐ์ฒด์ ๋ฉค๋ฒํจ์๋ฅผ ๊ฐ์ ธ์จ๋ค
์ด๋ฐ ์์ ์, ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด์ ๋ฌถ์ผ ์ ๋ฐ์ ์์ผ๋ฏ๋ก, ๋์ ๋ฐ์ธ๋ฉย ์ด๋ผ ๋ถ๋ฆฐ๋ค.
๋์ ๋ฐ์ธ๋ฉ์ ์๋ฏธ
์ฐ๋ฆฌ๋ ์ด ๊ธฐ์ ์ ์ฌ์ฉํด์, ์๋ก ๋ค๋ฅธ ์๋ฃํ๋ค์ ํ๋์ ๋ฒกํฐ์์ ๋ฃ์ด์ ๊ด๋ฆฌํ ์ ์๋ค.
Base::vf()
Derived::vf()
Base::vf()
Derived::vf()
Base::vf()
Program ended with exit code: 0
Base
ย ํด๋์ค์ ์ฃผ์๋ฅผ ๋ด๋ ์๋ฃํ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฒกํฐ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์, ๋ด๊ฐ ์ํ๋ ํด๋์ค๋ฅผ ๋ด์ผ๋ฉด, virtual
ย override
ย ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ์๋์ผ๋ก ๋ฉค๋ฒํจ์๊ฐ ๊ฒฐ์ ๋๋ค!
Pure virtual function (์์ ๊ฐ์ ํจ์)
virtual
ย ์ ์ ์ธํ ๋, ํน๋ณํ ๊ธฐ๋ณธ Base ํด๋์ค์์๋ ๊ธฐ๋ฅ์ ์ ์ํ์ง ์๊ณ ํ์ ํด๋์ค์์ ์ด ํจ์๋ฅผ ์ ์ํด์ ์ฌ์ฉํ ๋๊ฐ ์๋๋ฐ ์ด๋ ์ ์ธํ๋ ๊ฒ์ด ์์ ๊ฐ์ํจ์ย ์ด๋ค.
์์ ๊ฐ์ํจ์๋ฅผ ์ ์ธํ ๋๋, base ํด๋์ค์์ ์ด ํจ์์ ์๋์ด ์๋ค๋ ๊ฒ์ ๋ช
์ํ๊ธฐ ์ํด์ ๋ค์ย =0
ย ์ ์ถ๊ฐ๋ก ๋ฌ์์ค๋ค.
์ด ํ์๊ฐ ์์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ํ์ ํด๋์ค๋ก๋ถํฐ ์ด ํจ์๋ฅผ ํ์์ ์ผ๋ก ์ ์ํด์ผํ๋ค.
๋ํ Base ํด๋์ค์์ ์์ ๊ฐ์ด ์ ์ธํ์ ๊ฒฝ์ฐ main ํจ์์์ ์ฐ๋ฆฌ๋ ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
abstract Class(์ถ์ ํด๋์ค)
๋ด๊ฐ ํ์ํด๋์ค๋ค๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ์ถ์ ๋, ๊ทธ ์๋จ๊ณ์์ ์ด ํจ์๋ค์ ๋ํ ๊ฐ๋ต์ ์ธ ๊ฒ๋ค์ ์ ์ด๋ ์์ ์งํฉ์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ์ด๋ค.
์ด ๋, ์์ ๊ฐ์ํจ์๋ค๋ก ๊ตฌ์ฑ๋ ํ๋์ ํด๋์ค๋ฅผย ์ถ์ํด๋์คย ๋ผ ๋ถ๋ฅธ๋ค. ์ด๋ ๊ฒ ๊ด๋ฆฌํ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์ด๋ค ํด๋์ค๋ค์ ๊ณตํต๋ ํน์ง์ ๋ฌถ์ด์ ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ฉ์ดํ๋ค.