๐Ÿ™ƒ(์ค‘์š”!) ๋‹ค์ค‘ ์ƒ์†ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ... - ์ƒ์†๊ณผ ๋ฉค๋ฒ„ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ์— ๋Œ€ํ•ด

๋ณด๋ฌผ์ฐฝ๊ณ ยท2022๋…„ 8์›” 30์ผ
0

c++Intermediate ์ฝ”๋“œ๋ˆ„๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
10/62

๋ฌด๊ธฐ๋ฅผ ๋“ค๊ณ  ์žˆ๋Š” ์ „์‚ฌ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

problem

: ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ•ด๊ฒฐ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
-> ์•„๋ž˜์˜ ์ฝ”๋“œ๊ฐ€ ๋ญ๊ฐ€ ์ž˜๋ชป๋ฌ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด๋ผ

answer.


์–ธ์ œ ๋‹ค์ค‘์ƒ์†ํ•ด์•ผ ํ• ๊นŒ?

: ๊ฐ์ฒด ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , base๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ์„ ๋•Œ,
๊ฐ์ฒด ๋ฉค๋ฒ„๋ฅผ base ์ƒ์„ฑ์ž์— ์ธ์ˆ˜๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ์„ ๋•Œ,
์ด ๋•Œ, base ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉค๋ฒ„ ๊ฐ์ฒด๋„
์ƒ์†์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•จ.

  • ์ด์ „์‹œ๊ฐ„์— base ์ƒ์„ฑ์ž๊ฐ€ ๋ฉค๋ฒ„ ๊ฐ์ฒด ์ƒ์„ฑ์ž๋ณด๋‹ค ๋จผ์ € ํ˜ธ์ถœ๋จ์„ ํ™•์ธํ–ˆ๋‹ค.
    -> ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๊ฒ€์„ ๋“ค๊ณ  ์žˆ๋Š” ํžˆ์–ด๋กœ์ธ๋ฐ ํžˆ์–ด๋กœ์˜ base๋Š” ์ „์‚ฌ๋‹ค.
    ๊ทธ๋Ÿฐ๋ฐ ๊ฒ€์˜ ๋Šฅ๋ ฅ์น˜๋ฅผ base ์ „์‚ฌ ์ƒ์„ฑ์ž์— ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค๋ฉด????

  • ์ •๋ฆฌ 240801
    : ์ƒ์†๋œ ํด๋ž˜์Šค๊ฐ€ ํŒŒ์ƒ์— ์†ํ•ด ์žˆ๋Š” ๋ฉค๋ฒ„ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์•Œ์•„์•ผ ํ• ๋•Œ,
    ๋ฉค๋ฒ„ ๊ฐ์ฒด๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ƒ์†ํ•ด์„œ , ๊ธฐ์กด์˜ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์—๋‹ค๊ฐ€ ๋ณด๋‚ด์ฃผ์ž.

์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ˆœ์„œ

: ์ด์ „ ๋‚ด์šฉ์—์„œ ์ƒ์†๊ณผ ๋ฉค๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์กด์žฌํ•  ๊ฒฝ์šฐ, ๊ธฐ๋ฐ˜์ด ๋จผ์ € ํ˜ธ์ถœ๋จ์„
ํ™•์ธํ•จ.

  • 1) ์˜ˆ์ œ
    -> ์ธ์ž๋ฅผ ์ฐธ์กฐ๋กœ ๋ฐ›๋„๋ก ์Šต๊ด€ํ™”ํ•˜์ž.
    : ๋ฌด๊ธฐ๋ฅผ ์žฅ์ฐฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ์ „์‚ฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

  • 2) ์ด๋Ÿด๋ฐ”์— ๋ฉค๋ฒ„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„๊ฒƒ ๊ฐ™์Œ.
    : warrior๋ฅผ ์ƒ์†ํ•˜๊ณ , ๋ฌด๊ธฐ๋ฅผ ๋ฉค๋ฒ„๋กœ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

  • ๊ฒฐ๊ณผ : ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ.

  • ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ.

์ค‘์š”!

  • ์™œ ๋ฐœ์ƒํ•œ๊ฑฐ์•ผ?!! : ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ˆœ์„œ๋Š” ์ด๋ฏธ ์ •ํ•ด์ ธ ์žˆ์Œ.
    weaponOnWarrior ์ƒ์„ฑ์ž์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €์—์„œ weapon aa๋ฅผ ๋จผ์ € ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๊ธฐ๋ฐ˜ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ??????
  • ์ด์œ 
    : ๊ฐ ํด๋ž˜์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋Š” ์ˆœ์„œ๋Š” ์ƒ์† -> ๋ฉค๋ฒ„ ๊ฐ์ฒด ์ˆœ์„œ๋‹ค.
    ๋”ฐ๋ผ์„œ ๊ธฐ๋ฐ˜ํด๋ž˜์Šค์ธ warrior ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ , weapon aa ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž„.
    ์œ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ๋˜์ง€๋„ ์•Š์€ aa์˜ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„.
  • ๋‚ด๊ฐ€ ์•„๋ฌด๋ฆฌ ์ฝ”๋“œ ์ˆœ์„œ๋ฅผ aa() ๋จผ์ € ํ•˜๊ณ  , warrior(aa) {} ๋ฅผ ํ•˜๋”๋ผ๋„
    ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค -> ๋ฉค๋ฒ„ ๊ฐ์ฒด ์ˆœ์œผ๋กœ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง.

๋‹ค์ค‘ ์ƒ์†์„ ์‚ฌ์šฉํ• ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ

  • 3) ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•.
    : weapon์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ํด๋ž˜์Šค๋ฅผ ๋จผ์ € ์ƒ์†ํ•˜๋„๋ก ํ•ด์•ผ ํ•จ.
    ์ฆ‰, ๋‹ค์ค‘ ์ƒ์†์„ ์‚ฌ์šฉํ•จ.

  • ์ด์œ : ๋‹ค์ค‘์ƒ์†์—์„œ ๋จผ์ € ์ƒ์†ํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์ƒ weapontManager ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„.
    -> ๋‹ค์ค‘์ƒ์†์œผ๋กœ ํ†ตํ•ด์„œ weapon aa๋ฅผ warrior์˜ ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ๋„˜๊ธธ์ˆ˜ ์žˆ๋‹ค!

  • protected๋กœ ์ ‘๊ทผ์ œ์–ดํ•จ.

  • c++์—์„œ iostream์„ ๋งŒ๋“ค๋•Œ, ์ด์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ
    ๋‹ค์ค‘์ƒ์†์„ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค๊ณ  ํ•จ.

  • ๋‹ค์ค‘ ์ƒ์†์˜ ํŠน์ง•.

    ๋‹ค์ค‘ ์ƒ์†์—์„œ๋Š” ๋จผ์ € ์ž‘์„ฑํ•œ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋จ.

problem

  • ์•„๋ž˜์˜ ์„ค๋ช…์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ์ง€ ๊ตฌํ˜„ํ•˜์ž
    : warrior ํด๋ž˜์Šค์™€ weapon (๋ฉค๋ฒ„๋กœ string : ๋ฌด๊ธฐ ์ด๋ฆ„) ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ž.
    :: warror ์ƒ์„ฑ์ž๋Š” weapon ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์–ด๋–ค ๋ฌด๊ธฐ์ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.
    ::: weaponOnWarrior๋ฅผ ๋งŒ๋“ค๊ณ , warrior๋ฅผ ์ƒ์†ํ•˜๊ณ , weapon์„ ๋ฉค๋ฒ„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์ž.
    :::: ์ด๋•Œ weaponOnWarrir์˜ ์ƒ์„ฑ์ž์—์„œ weapon ๋ฉค๋ฒ„๋ฅผ warror์—๊ฒŒ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ์ž!

  • ์ฝ”๋“œ

  • ์–ด๋–ป๊ฒŒ ๋ฐ”๊ฟ€ ๊ฒƒ์ธ๊ฐ€?
    : ์ด๋ฏธ warrior๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์œผ๋กœ weapon์ด ๋จผ์ € ์™€์•ผ ํ•จ.
    -> ๋‹ค์ค‘ ์ƒ์†์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ์ƒํ™ฉ์ž„.
    --> ์ฒ˜๋ฆฌํ•˜๋ผ!!
    : weapon ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ weapon ํด๋ž˜์Šค๋ฅผ ๋ฉค๋ฒ„๋กœ ๊ฐ–๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ,
    ์ด๋ฅผ ์ด์šฉํ•ด์•ผ ํ•จ!

์ƒ์„ฑ์ž์™€ ๊ฐ€์ƒํ•จ์ˆ˜

  • ์ƒ์„ฑ์ž์—์„œ๋Š” ๊ฐ€์ƒํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด์œ  : ๊ฐ€์ƒํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ํ…Œ์ด๋ธ”์€ ํŒŒ์ƒ ์ƒ์„ฑ์ž๊นŒ์ง€ ์™€์•ผ
ํŒŒ์ƒ์ชฝ์˜ ๊ฐ€์ƒํ•จ์ˆ˜๋“ค๋กœ ์„ค์ •์ด ๋จ.

๋˜ ๋‹ค๋ฅธ ์ด์œ  : ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋“ค์ด ๋จผ์ € ์ดˆ๊ธฐํ™”๋œ ํ›„, ํŒŒ์ƒํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋“ค์ด
์ดˆ๊ธฐํ™”๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ํŒŒ์ƒํด๋ž˜์Šค์˜ ๊ฐ€์ƒํ•จ์ˆ˜๊ฐ€ call๋œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, vTable์—์„œ ์ง€์ •๋˜์ง€ ์•Š์€, ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€
๊ธฐ๋ฐ˜ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋“ค์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ.
-> ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ํ•ด๋‹นํ•˜๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ์ž„.
https://github.com/codenuri/CPPINTERMEDIATE/blob/master/106_CONSTRUCTOR/ctor8.cpp

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€