더북(TheBook)

Box 클래스를 상속받아 Carton 클래스를 만들 것이다. 데이터 멤버는 protected로 되어 있고, 소멸자는 virtual로 지정되어 있다. 반드시 이렇게 해야 하는 건 아니지만, 기반 클래스의 소멸자를 virtual로 선언하는 것은 좋은 습관이다. 이렇게 선언해두면 오버헤드를 최소화할 수 있고, 파생 클래스에서 잘못된 소멸자를 호출하는 걸 예방할 수 있다. volume() 멤버와 스트림 입출력을 수행하는 read()write() 멤버는 virtual로 선언되어 있으니 상속받은 클래스에서는 필요할 때 이들 멤버를 재정의하면 된다.

volume() 함수는 Box.hinline으로 정의할 수 있다.

inline double Box::volume() const { return length*width*height; }

비교 함수도 inline으로 정의할 수 있다.

// < 연산자
inline bool Box::operator<(const Box& box) const
{ return volume() < box.volume(); }
 
// 상등관계(equality) 비교 연산자
inline bool Box::operator==(const Box& box) const
{
  return length == box.length && width == box.width && height == box.height;
}
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.