참조와 포인터로 받습니다
Shape& 또는 Shape*는 실제 객체의 파생
부분을 보존합니다.
가상 함수 호출은 실제 객체 타입을 따라가지만, 객체를 값으로 복사하면 파생 부분이 잘려 다형성이 사라질 수 있습니다.
virtual 함수를
호출합니다.
virtual로
둡니다.
Shape& 또는 Shape*는 실제 객체의 파생
부분을 보존합니다.
기반 클래스 함수에 virtual이 있어야 런타임 타입의
재정의가 선택됩니다.
파생 클래스의 override는 잘못된 매개변수나
const 누락을 드러냅니다.
draw(const Shape& s)처럼 기반 참조로
받습니다.
draw(Shape s)처럼 값으로 받으면 파생 상태가
사라집니다.
std::unique_ptr<Base>처럼
명확히 표현합니다.
실제 타입 다형성 API는 “무엇을 호출할까”보다 “객체의 실제 정체성을 어떻게 보존할까”가 먼저입니다.