κ°λ
1) κΈ°λ° κ°μ²΄μ ν¬μΈν°λ‘ νμ ν΄λμ€λ₯Ό μ°Έμ‘°ν μ μμ.
2) κΈ°λ° κ°μ²΄μ μ°Έμ‘°λ‘ νμ ν΄λμ€λ₯Ό μ°Έμ‘°ν μ μμ.
κ°λ°Έλ₯ ννλ‘ νλ©΄??
: μ΄ λλ λ©λͺ¨λ¦¬ κ΅¬μ‘°λ§ λ°λΌλ³΄κ³ νλ κ²μ΄κΈ° λλ¬Έμ λ³΅μ¬ μμ€ λ°μνλ€.
μ
μΊμ€ν
μμ λ€ν₯μ± μ μ©νλ λ°©λ².
: κΈ°λ° ν¬λμ€μμμ virtual μ μΈ.
-> λμ λ°μΈλ©μ μν΄ ν¬μΈν°λ₯Ό μ€νμμΌλ‘ μμμ νλ³νν¨.
μ μ΄κ²μ΄ κ°λ₯ν κ²μΈκ°?
: κΈ°λ° ν΄λμ€μ νμ ν΄λμ€μ λ©λͺ¨λ¦¬ ꡬ쑰 λλ¬Έμ.
-> νμμ΄λ κΈ°λ°μ΄μ λ©λͺ¨λ¦¬ ꡬ쑰μμ μλ‘μ΄ λ°μ΄ν°κ° μΆκ°λ νν.
--> κ·Έλμ κΈ°λ°μ΄λ‘ νμμ μ°Έμ‘°ν μ μμ.
μ
μΊμ€ν
μΌλ‘ κΈ°λ° ν΄λμ€μ λ©€λ²λ μ κ·Όν μ μμ.
but νμν΄λμ€μμ μλ‘κ² μΆκ°ν λ©€λ²λ μ κ·Όν μ μμ.
-> νμν΄λμ€λ§ μν λ°μ΄ν°μ΄κ³ , κΈ°λ°μλ μ λ³΄κ° μκΈ° λλ¬Έμ.
λ§μ½ μμ κ·Έλ¦Όμμ λ¬Έμ κ° μλ€κ³ νλ€λ©΄, childA , childB μμ μλ‘μ΄ λ°μ΄ν°κ° μΆκ°λλ€κ³ νλ©΄ pμμ λͺ¨λ μ κ·Όμ΄ κ°λ₯ν μνμΈλ°
κ΅μ₯ν 무λΆλ³νμ§ μμκΉ?, μ΄λ»κ² μ»΄νμΌ λ¨κ³μμ pκ° λͺ¨λ νμν΄λμ€μ λ°μ΄ν°λ₯Ό μμ μμκΉ?
κ²°λ‘
: μ μΊμ€ν μ νλλΌλ virtualμ ν΅ν΄ μ€νμμ λ§λ€μλ€κ³ νλλΌλ, νμν΄λμ€λ§μ λ©€λ² λ°μ΄ν°λ μ κ·Όν μ μλ€.
1) virtual μ μΈ μμ κ²½μ°.
: μλ μ½λλ₯Ό 보면, pμ νμ
μ parent * , μ΄κ³ μ°Έμ‘°νλ ν΄λμ€μ νμ
μ΄ parent λΌλ κ²μ νμΈν μ μλ€.
2) virtual μ μΈ μμ κ²½μ°.
: μλ μ½λλ₯Ό 보면, pμ νμ
μ parent* , μ΄κ³ μ°Έμ‘°νλ ν΄λμ€μ νμμ΄
νμμΈ childλΌλ κ²μ νμΈ ν μ μλ€.
κ²°λ‘
ν¬μΈν°λ‘ μ μΊμ€ν μ νλλΌλ virtual μ μΈ μ 무μ λ°λΌμ μ€νμ μ°Έμ‘° μ¬λΆκ° λ€λ₯΄λ€.
: μ μΊμ€ν μ μ΄μ©ν΄ , λ€λ₯΄κ² νμλ λͺ¨λ ν΄λμ€λ₯Ό μ°Έμ‘° ν μ μμ.
: Animal ν΄λμ€μ Dog , Cat ν΄λμ€λ₯Ό λ§λ€μ΄λΌ.
: κΈ°λ°ν΄λμ€μ ν¨μλ₯Ό νμ ν΄λμ€μμ μ¬μ μν μ μμ.
: Shout ν¨μλ₯Ό κΈ°λ°κ³Ό νμμμ μ€λ²λΌμ΄λ© λ§λ€κ³ , νΈμΆν΄λ³΄μ.
κ°) μ
μΊμ€ν
ν νμ μ€λ²λΌμ΄λ© ν¨μλ₯Ό νΈμΆνλΌ.
-> μ¬μ μ νμ§λ§, Animal κ°μ²΄μ Shoutκ° νΈμΆλ¨.
: μ¦ μ°Έμ‘°νκ³ μλ ν΄λμ€λ Dog μ Cat μ΄ μλλΌ Animal μ΄λΌλ κ²μ μλ―Ένλ€.
λ) νμ κ°μ²΄λ§ μμ± νμ μ€λ²λΌμ΄λ© ν¨μλ₯Ό νΈμΆνλΌ.
-> μμμ΄ μΆλ ₯λ¨μ νμΈν¨.
https://online-unreal.tistory.com/77
: λ°μ΄ν° νμ νμ μ κ²°μ νλ κ²μ λ§ν¨.
1) μ μ λ°μΈλ© : μ»΄νμΌ μμ νμ μ κ²°μ ν¨.
2) λμ λ°μΈλ© : μ€νμκ°μ νμ μ κ²°μ ν¨.
: ν¨μλ₯Ό νΈμΆν λ μ€μ μ΄λ€ ν¨μλ₯Ό μ°κ²°ν κ²μ΄λλ₯Ό λ§ν¨.
: c++μ κΈ°λ³Έμ μΌλ‘ μ μ λ°μΈλ©μ λν΄νΈκ°μΌλ‘ μ¬μ©ν¨.
- virtualλ‘ κ°μμλ©Έμ μμ±ν΄λ νμ
μ baseTypeμ κ·Έλλ‘ κ°μ§κ³ κ°λ€.
: virtual tableμμ μ°Έμ‘°ν μ€λ²λΌμ΄λ© ν¨μκ° νμν΄λμ€μ ν¨μ ν¬μΈν°λ‘ κ²°μ (λ³κ²½) λλ κ²μ΄λ€.
-> μλ μμ λ typeid μ μΈμλ₯Ό μλͺ» μμ±νλ€.
: 맨 μμμ νμ
νμΈνλ κ·Έλ¦Όμ 보μ. 240731 μλλ©΄ λ°λ‘ λ°μ μλ€.
μ΄λ κ² λ³κ²½ν΄μΌλ§ κ°μ²΄ νμ
μ μμ μλ€. 240428
: virtual ν€μλμ μν΄μ λμ λ°μΈλ© μ²λ¦¬λλ κ²μ νμΈν μ μλ€.
virtual ν€μλλ₯Ό λΉΌλ©΄ μ΄λ»κ² λ κΉ?
: μμμ λ§ν c++μ κΈ°λ³Έ λ°μΈλ©μΈ μ μ λ°μΈλ©μ΄ μ μ©λμ΄μ ν¬μΈν° νμ
μΌλ‘ κ²°μ λλ κ²μ νμΈν μ μλ€.
μμ
Animal *a = new Dog;
ν κ²½μ°, μ»΄νμΌ μμ aλ Dogλ‘ λμ ν λΉ νμ§λ§,
μ»΄νμΌλ¬κ° λ°μλ€μ΄κΈ°μλ Animal νμ μΌλ‘ μΈμ§νκ² λ¨.
λ°λΌμ a->Shout()λ₯Ό νκ² λλ©΄, Animal::Shout λ₯Ό νΈμΆνκ² λ¨.
μμ μμ μμ Dog::Shoutλ₯Ό νκ² νκΈ° μν΄μλ μ€νμκ°μ
νμ μ κ²°μ νκ² ν΄μΌ ν¨!
: κ°μ²΄λ₯Ό λμ λ°μΈλ© ν¨μΌλ‘μ¨ μ€νμ νμ μΌλ‘ κ²°μ ν¨., μ€νμκ°μ λ©λͺ¨λ¦¬λ₯Ό μ‘°μ¬ν΄μ ν¨μ νΈμΆμ κ²°μ ν¨.
: κ°μν¨μλ₯Ό λ§λ€μ΄μ , Dog::shoutκ° νΈμΆλκ² νμ¬λΌ.
-> μμ κ³Ό μΌμΉμ΄ νΈμΆλ¨μ νμΈν¨.
: λμΌν μ½λμ λμμ΄ μν©μ λ°λΌ λ€λ₯΄κ² λμνλ κ²μ λ§ν¨.
λμμΈ ν¨ν΄μμ μμ£Ό μ¬μ©λλ κΈ°λ³Έ κ°λ
: λ³κ²½νλ κ²μ λ€νμ±μΌλ‘ νκ³ , λ³κ²½λμ§ μλ κ²μ κ·Έλλ‘ λ .