값으로 받으면 정적 결과
Derived 객체를 넘겨도 Base 부분만 복사되어 파생 정보가 사라진다.
void print(Animal a)
값으로 복사하면 객체가 잘리고, 참조나 포인터와 virtual 함수를 함께 써야 런타임 실제 타입의 override가 호출된다.
Derived 객체를 넘겨도 Base 부분만 복사되어 파생 정보가 사라진다.
void print(Animal a)
virtual 호출이 실제 객체의 vtable을 따라 override를 선택한다.
void print(const Animal& a)