호출 결과는 전달 방식, virtual 여부, 실제 객체 순서로 판정한다
같은 draw() 호출도 값으로 복사하면 슬라이싱이 먼저 일어나고,
참조/포인터에서 virtual을 거쳐야 런타임 타입으로 이동한다.
전달 형태
함수 선언
선택 기준
결과
값 복사
Base b = d, f(Base)virtual이어도 이미 파생 부분이 잘림
복사된 객체의 타입은
Base객체 슬라이싱
참조/포인터
Base&, Base*비가상 멤버 함수
컴파일 시점의 표현 타입
정적 바인딩
참조/포인터
Base&, Base*virtual 멤버 함수실제로 가리키는 객체 타입
동적 바인딩
판정식
값 복사 여부 확인 →
virtual 확인 → 실제 객체 타입 확인
설계 결론
다형 인자는
Base 값보다 Base&/Base*를 쓰고,
기반 포인터로 삭제할 수 있으면 소멸자도 virtual로 둔다.