가상함수 (virtual) 는 OOP 의 다형성을 구현하기 위한 좋은 방법 입니다.
사실 가상이라는 이름을 붙였을뿐 엄밀히 말하면 "동적결합 함수"라고 하는게 이해가 더 쉽습니다.
별로 주의할 점은 없고요, 만약 memory 관리부분에 있어서 class destructor 를 virtual 로 해 주는 정도?
주의점(항상은 아니고) 이라 할 수 있겠죠.
다음과 같은 예에서 (정확한 c++ 문법은 아닙니다)
class A
{
A() { init(); }
virtual void init(){}
}
class B : A
{
char *p;
B() { p = new char[256]; }
void init() { strcpy(p,"Hello"); }
}
위의 경우 주의 해야 합니다.
B b; 라고 b 객체를 만드는 순간, 프로세스의 흐름은 우선 A 의 constructor로 들어가며 여기서 init() 함수를
호출하게 되는데 이것이 A 의 init() 가 아니라 B 의 init() 를 호출하게 됩니다. 이경우 아직 B의 constructor를
수행하지 않은 상태이기 때문에 p 가 아직 정의 되어 있지 않기 때문에 에러를 냅니다.
주의해야할 간단한것중 하나 입니다.
http://www.winapi.co.kr/ 의 C++ 강좌 , 제 30장 다형성 에 설명이 잘 되어 있습니다.
참고해 보시기 바랍니다.
문의드립니다 님이 쓰신 글 :
: 가상함수를 가진 클래스의 메모리에 가상함수 포인터 테이블을 가리치는 포인터를
: 가지고 있고 실행 중에 그 가상 함수 테이블 주소에 있는 함수를 실행 한다고 알고 있습
: 니다...
:
: 그런데 virtual을 제가 직접 만든다면 어떤 부분을 신경써야될까요??
: virtual을 직접 만든다고 했을 때 막상 구현을 그려보니 머리가 멍해지네요...
:
: 고수님들의 조언 부탁드립니다...ㅠㅜ
|