polymorphism

virtual 호출은 정적 타입이 아니라 실제 객체의 override로 간다

호출 코드는 Base를 보지만 virtual 함수는 런타임 객체의 구현을 찾는다.

Base 선언virtual void draw()
Derived 선언void draw() override
호출 경로Base&로 draw 호출
선택 결과실제 객체의 override
조건맞으면틀리면
Base 함수가 virtual동적 바인딩 후보정적 바인딩
시그니처가 일치override로 교체새 함수가 되어 숨김
객체가 잘리지 않음Derived 정보 유지Base 부분만 호출

핵심 virtual은 이름만 맞추는 기능이 아니라 실제 객체의 override를 찾게 하는 호출 계약이다.