virtual function - Gakgu/Gakgu.github.io GitHub Wiki

κ°œμš”

가상 ν•¨μˆ˜. λΆ€λͺ¨ 클래슀 포인터가 μžμ‹ 클래슀의 λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

κ°€μƒν•¨μˆ˜μ˜ ν˜•νƒœ

클래슀 μ„ μ–Έλ¬Έμ—μ„œ 맴버 ν•¨μˆ˜μ˜ μ•žμ— virtual을 뢙인닀.

virtual void example();

μ€‘μš”ν•œ 문법적 사싀

  1. λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” μžμ‹ 클래슀λ₯Ό λŒ€μž…λ°›μ„ 수 있으며 포인터 λ˜ν•œ λ§ˆμ°¬κ°€μ§€μ΄λ‹€. κ·Έ λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.

     class Parent parent, *ptr_parent;
     class Child child, *ptr_child;
     
     parent = child // Ok.
     ptr_parent = ptr_child // Ok.
     
     child = parent // Error
     ptr_child = ptr_parent // Error
    
  2. λΆ€λͺ¨ ν΄λž˜μŠ€νƒ€μž…μ˜ 포인터가 μžμ‹ 클래슀의 μ£Όμ†Œλ₯Ό 가리킨닀 해도 κ°€μƒν•¨μˆ˜κ°€ μ•„λ‹Œ λ§΄λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€νƒ€μž…μ˜ λ©€λ²„ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

     Parent *p;
     
     p = ptr_parent;
     p->function() // Parent 클래슀의 function() 호좜
     
     p = ptr_child;
     p->function() // Parent 클래슀의 function() 호좜
    

순수 가상 ν•¨μˆ˜

μ •μ˜κ°€ μ•ˆλ˜μ–΄ μžˆλŠ” 가상 ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. 가상 ν•¨μˆ˜μ˜ 끝에 =0을 뢙인닀.

virtual void example()=0;

κ°€μƒν•¨μˆ˜μ˜ μƒμ„±μž, 파괴자

λΆ€λͺ¨ 클래슀의 νŒŒκ΄΄μžλŠ” 항상 κ°€μƒν•¨μˆ˜λ‘œ μ“°λŠ” 것이 μ’‹λ‹€.