계약을 좁히지 않는다
파생 클래스가 기반 함수의 사전 조건을 더 강하게 만들면 기반 타입 대체가 깨진다.
파생 클래스는 기반 클래스가 필요한 자리에 들어간다. 이 대체가 호출자 관점에서 참이 아니면 상속 계층은 코드 공유보다 큰 결합을 만든다.
파생 클래스가 기반 함수의 사전 조건을 더 강하게 만들면 기반 타입 대체가 깨진다.
Base*로 Derived를 소유할 수 있으면 기반 소멸자는 virtual이어야 한다.
공통 코드 몇 줄을 공유하려는 목적이면 멤버 객체 위임이 더 단순할 수 있다.
class Renderer {
public:
virtual ~Renderer() = default;
virtual void render(const Scene&) = 0;
};