만약 부모 클래스 버전의 함수를 쓰고 싶다면? graduatestudent.student::func()이렇게 쓰면 된다. - 포인터를 사용했을 때의 문제 발생:

    ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56634c3f-3f2d-4fa6-bdfd-1346b7dccbf2/Untitled.png>)
    
    의도는 graduatestudent display지만 student 버전으로 실행!
    
- virtual keyword
어떤 함수가 오버로드 될 것이라는 것을 선언하는 역할
부모 클래스의 함수 선언 맨 앞에 넣는다. 
이러면 위의 문제가 해결된다.
    - 포인터를 사용하면 Destructor에서도 문제가 발생하는데,
    virtual 선언을 안해주면 부모 클래스의 파괴자가 호출된다.
    따라서 virtual destructor 선언을 해주면
    자식 클래스의 파괴자 호출 후 부모클래스의 파괴자가 호출된다.
    
    따라서 virtual 선언은 오버로드된다면 해주자.
    *생성자는 virtual일 필요 없다.
    *파괴자는 virtual이어야 한다.

Untitled