Virtual Function
page 346

"함수를 오버라이딩을 했다는 것은 해당 객체에서 호출되어야 하는 함수를 바꾼다는 의미인데
포인터 변수의 자료형에 따라서 호출되는 함수의 종류가 달라지는 것은 문제가 있어 보입니다.
" 그래서 c++은 이러한 상황이 발생하지 않도록 '가상함수'라는 것을 제공하고 있다. 
그런데 이 가상함수라는 것은 C++의 개념이 아닌 객체지향의 개념이다. 따라서 C++뿐만이
아니라 JAVA, C#과 같은 객체지향 언어에서도 이와 동일한 개념의 문법이 제공되고 있다.

가상함수의 선언은 virtual 키워드의 선언을 통해서 이뤄진다. 그리고 이렇게 가상함수가
선언되고 나면, 이 함수를 오버라이딩 하는 함수도 가상 함수가 된다. 따라서 이와 같이
First class의 MyFunc함수가 virtual로 선언되면 이를 오버라이딩 하는 Second class
의 MyFunc 함수도 그리고 이를 오버라이딩 하는 Third class의 MyFunc함수도 가상함수
가 된다.

7행의 MyFunc 함수가 vitual로 선언되었으니 굳이 vitual선언을 추가하지 않아도 가상
함수가 된다. 그러나 이렇게 vitual 선언을 넣어서 함수가 가상함수임을 알리는 것이 좋다.

**** 함수가 가상 함수로 선언되면, 해당 함수 호출시 포인터의 자료형을 기반으로 
호출 대상을 결정하지 않고, 포인터 변수가 실제로 가르키는 객체를 참조하여 호출의 
대상을 결정한다.