더북(TheBook)

3.6.4 기반 클래스 포인터를 담은 컨테이너

기반 클래스 타입으로 원소를 정의한 컨테이너나 컨테이너 어댑터에 파생 클래스 객체의 포인터도 저장할 수 있다. 이렇게 하면 컨테이너 원소가 가리키는 객체에서 다형적인 동작을 얻을 수 있다. 어떻게 동작하는지 알아보려면 기반 클래스와 파생 클래스가 필요하다. 여기서는 2장에서 사용한 Ex2_06Box 클래스를 다시 꺼내서 조금씩 고쳐보는 것으로 시작하겠다. 먼저 클래스 정의부터 보자.

class Box
{
protected:
  size_t length {};
  size_t width {};
  size_t height {};
 
public:
  explicit Box(size_t l = 1, size_t w = 1, size_t h = 1) : length {l}, width {w}, height {h} {}
  virtual ~Box() = default;
 
  virtual double volume() const;         // 상자의 부피
 
  // Box 객체의 비교 연산자
  bool operator<(const Box& box) const;
  bool operator==(const Box& box) const;
 
  // 입력 스트림과 출력 스트림
  virtual std::istream& read(std::istream& in);
  virtual std::ostream& write(std::ostream& out) const;
};
 

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