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;

가상함수의 생성자, 파괴자

부모 클래스의 파괴자는 항상 가상함수로 쓰는 것이 좋다.