대체 가능성을 묻는다
기반 타입을 받는 모든 함수가 파생 타입에서도 같은 약속을 지키는지 확인한다.
상속을 쓰면 파생 객체가 기반 객체가 필요한 자리에 들어간다. 이 관계가 의미적으로 참인지 확인하지 않으면 재사용보다 결합 비용이 커진다.
기반 타입을 받는 모든 함수가 파생 타입에서도 같은 약속을 지키는지 확인한다.
base pointer로 delete할 일이 있으면 기반 소멸자가 virtual이어야 한다.
다형 객체는 참조나 포인터로 다루고, 값 복사는 clone 같은 명시 함수로 분리한다.
class Shape {
public:
virtual ~Shape() = default;
virtual double area() const = 0;
overflow-wrap: break-word;
word-break: keep-all;
};