virtual function - Gakgu/Gakgu.github.io GitHub Wiki
개요
가상 함수. 부모 클래스 포인터가 자식 클래스의 멤버함수를 호출할 때 사용하는 함수이다.
가상함수의 형태
클래스 선언문에서 맴버 함수의 앞에 virtual을 붙인다.
virtual void example();
중요한 문법적 사실
-
부모 클래스는 자식 클래스를 대입받을 수 있으며 포인터 또한 마찬가지이다. 그 반대는 불가능하다.
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
-
부모 클래스타입의 포인터가 자식 클래스의 주소를 가리킨다 해도 가상함수가 아닌 맴버함수를 호출할 때에는 부모 클래스타입의 멤버함수가 호출된다.
Parent *p; p = ptr_parent; p->function() // Parent 클래스의 function() 호출 p = ptr_child; p->function() // Parent 클래스의 function() 호출
순수 가상 함수
정의가 안되어 있는 가상 함수를 의미한다. 가상 함수의 끝에 =0을 붙인다.
virtual void example()=0;
가상함수의 생성자, 파괴자
부모 클래스의 파괴자는 항상 가상함수로 쓰는 것이 좋다.