클래스의 상속관계에서 부모의 함수를 오버라이딩 하여 사용할 때가 있습니다. 만약 그 함수의 객체를 포인터로 만들었을 때 문제가 생길 수 있습니다. 다음의 코드를 보면서 이해해 보겠습니다. class First { public: void SimpleFunc() { cout ptr2 ( ptr3 -> Third 클래스 ) 가 됩니다. 하지만 SimpleFunc() 함수는 각각 생성된 클래스에 있는 함수가 불러와졌습니다. 문제없이 출력이 된것처럼 보이지만 사실 논리상 맞지 않습니다. 이러한 로직 에러를 방지하기 위해 C++에 있는 개념이 가상함수입니다. 예를 통해서 가상함수에 사용을 확인해 보겠습니다. class First { public: virtual void SimpleFunc() { cout