가상함수의 원리가상 함수는 실행 시간에 호출될 함수를 결정합니다.- 그럼 어떻게 실행 시간에 객체의 클래스형에 따라 재정의된 가상 함수를 찾아 호출할 수 있는 것일까요? C++는 가상 함수를 처리하기 위해 가상 함수를 갖는 클래스마다 가상 함수 테이블을 생성합니다.- 또한, 가상 함수를 갖는 클래스의 객체마다 가상 함수 테이블 포인터라는 숨겨진 멤버 변수를 생성합니다.- C++ 컴파일러가 가상 함수를 갖는 클래스에 대해 가상 함수 테이블을 생성하고 가상 함수 테이블을 갖는 클래스의 객체를 생성하면 객체의 멤버 변수를 할당하기 전에 먼저 가상 함수 테이블의 주소를 저장하는 가상 함수 테이블 포인터가 할당됩니다.- 바로 이 가상 함수 테이블 포인터와 가상 함수 테이블이 가상 함수를 호출할 때 이용되는 것입니다.