가상함수의 원리
가상 함수는 실행 시간에 호출될 함수를 결정합니다.
- 그럼 어떻게 실행 시간에 객체의 클래스형에 따라 재정의된 가상 함수를 찾아 호출할 수 있는 것일까요?
C++는 가상 함수를 처리하기 위해 가상 함수를 갖는 클래스마다 가상 함수 테이블을 생성합니다.
- 또한, 가상 함수를 갖는 클래스의 객체마다 가상 함수 테이블 포인터라는 숨겨진 멤버 변수를 생성합니다.
- C++ 컴파일러가 가상 함수를 갖는 클래스에 대해 가상 함수 테이블을 생성하고 가상 함수 테이블을 갖는 클래스의 객체를 생성하면 객체의 멤버 변수를 할당하기 전에 먼저 가상 함수 테이블의 주소를 저장하는 가상 함수 테이블 포인터가 할당됩니다.
- 바로 이 가상 함수 테이블 포인터와 가상 함수 테이블이 가상 함수를 호출할 때 이용되는 것입니다.
'Programming Language > C, C++' 카테고리의 다른 글
C++ 포인터와 레퍼런스의 차이 (0) | 2014.11.12 |
---|---|
C++ malloc/free와 new/delete의 차이점 (0) | 2014.11.12 |
C++ 가상 함수 (virtual) - 가상 소멸자 (0) | 2014.11.07 |
C++ 가상 함수 (virtual) - 동적 바인딩 (0) | 2014.11.07 |
C++ 가상 함수 (virtual) - 기본 (0) | 2014.11.07 |