polymorphism
virtual 호출은 정적 타입이 아니라 실제 객체의 override로 간다
호출 코드는 Base를 보지만 virtual 함수는 런타임 객체의 구현을 찾는다.
Base 선언virtual void draw()
Derived 선언void draw() override
호출 경로Base&로 draw 호출
선택 결과실제 객체의 override
| 조건 | 맞으면 | 틀리면 |
|---|---|---|
| Base 함수가 virtual | 동적 바인딩 후보 | 정적 바인딩 |
| 시그니처가 일치 | override로 교체 | 새 함수가 되어 숨김 |
| 객체가 잘리지 않음 | Derived 정보 유지 | Base 부분만 호출 |
핵심 virtual은 이름만 맞추는 기능이 아니라 실제 객체의 override를 찾게 하는 호출 계약이다.