호출자 언어를 남긴다
구체 타입 이름 없이도 필요한 행동을 표현할 수 있는 함수만 추상 클래스에 둔다.
순수 가상 함수가 있는 클래스는 직접 만들 수 없다. 대신 호출자가 기대하는 최소 행동과 파생 클래스가 채워야 할 책임을 분명히 한다.
구체 타입 이름 없이도 필요한 행동을 표현할 수 있는 함수만 추상 클래스에 둔다.
파생 클래스가 반드시 제공해야 할 함수는 pure virtual로 둔다.
템플릿 메서드처럼 공통 순서를 제공하되, 확장 지점이 너무 많아지지 않게 한다.
class Clock {
public:
virtual ~Clock() = default;
virtual std::chrono::system_clock::time_point now() const = 0;
};