CppModule 04

04

main thema : ๊ฐ€์ƒ ํ•จ์ˆ˜.

๊ฐ€์ƒ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์•ž ๊ณผ์ œ์—์„œ ์ •๋ฆฌ.

ex00

๋ชฉ์  : Polymorphism๊ณผ virtual ์†Œ๋ฉธ์ž ๋ฐ ํ•จ์ˆ˜.

Animalํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” Cat๊ณผ Dogํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ ๋™๋ฌผ์˜ ์†Œ๋ฆฌ ๋ฐ ์†Œ๋ฉธ์ž๋ฅผ ๊ฐ€์ƒ์œผ๋กœ ์„ ์–ธ.

๋‹คํ˜•์„ฑ(Polymorphism)

๋‹คํ˜•์„ฑ(ๅคšๅฝขๆ€ง, polymorphism; ํด๋ฆฌ๋ชจํ”ผ์ฆ˜)์€ ๊ทธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ž๋ฃŒํ˜• ์ฒด๊ณ„์˜ ์„ฑ์งˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด์˜ ๊ฐ ์š”์†Œ๋“ค(์ƒ์ˆ˜, ๋ณ€์ˆ˜, ์‹, ์˜ค๋ธŒ์ ํŠธ, ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋“ฑ)์ด ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•(type)์— ์†ํ•˜๋Š” ๊ฒƒ์ด ํ—ˆ๊ฐ€๋˜๋Š” ์„ฑ์งˆ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋ฐ˜๋Œ“๋ง์€ ๋‹จํ˜•์„ฑ(monomorphism)์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด์˜ ๊ฐ ์š”์†Œ๊ฐ€ ํ•œ๊ฐ€์ง€ ํ˜•ํƒœ๋งŒ ๊ฐ€์ง€๋Š” ์„ฑ์งˆ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.-์œ„ํ‚คํ”ผ๋””์•„-

๋‹คํ˜•์„ฑ์— ์˜ํ•ด ๊ฐ์ฒด์˜ ๋งด๋ฒ„ ์ƒํ™ฉ(cast)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” overridng๊ณผ virtual๊ฐ™์€ ํ‚ค์›Œ๋“œ ๋“ฑ์— ์˜ํ•ด ์ƒ๊ธด๋‹ค.

ex01

๋ชฉ์  : deep copy

ํฌ์ธํ„ฐํ˜• ๋งด๋ฒ„๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ,

์–‹์€ ๋ณต์‚ฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋””ํดํŠธ ๋ณต์‚ฌ์ƒ์„ฑ์ž/์—ฐ์‚ฐ์ž๊ฐ€ ์“ฐ๋Š” ๋ฐฉ์‹์ด๊ณ , ๊นŠ์€๋ณต์‚ฌ๋ฅผ ํ•˜๋Ÿฌ๋ฉด ์ด๋ฅผ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

deep copy์— ๋”ฐ๋ฅธ ์˜ํ–ฅ์€ main๋ฌธ ์ฐธ๊ณ .

ex02

๋ชฉ์  : ์ถ”์ƒ ํด๋ž˜์Šค ๊ตฌํ˜„ ๋ฐ ์‚ฌ์šฉ.

์ธํ„ฐํŽ˜์ด์Šค์ฒ˜๋Ÿผ ์ธ์Šคํ„ด์Šคํ™” ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋กœ animalํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

  1. ์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค์ด๋ฉฐ, ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ํ•˜๋‹ค(์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ).
  2. canonical form ๋ฐ getter๋ฅผ ์„ ์–ธ/์ •์˜ํ•œ๋‹ค. ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ์ž์‹ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ.

ํ˜•ํƒœ

virtual void makeSound() const = 0;

์ธ์Šคํ„ด์Šคํ™” ์‹œ๋„์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ

C++ error: object of abstract class type is not allowed: pure virtual function has no overrider