read()와 write() 함수 멤버는 Box.cpp 파일에 정의한다. 코드는 다음과 같다.
// Box.cpp // Box 클래스의 함수 멤버 정의 #include <iostream> #include "Box.h" // 스트림에서 Box 객체를 읽기 std::istream& Box::read(std::istream& in) { size_t value {}; if ((in >> value).eof()) return in; length = value; in >> width >> height; return in; } // 스트림에 Box 객체를 쓰기 std::ostream& Box::write(std::ostream& out) const { out << typeid(\*this).name() << "(" << length << "," << width << "," << height << ")"; return out; }
함수 정의는 이해하기 쉽게 되어 있다. read() 함수는 파일 끝을 읽을 때 istream 객체에 EOF 표시자를 설정해 두는 걸 볼 수 있다. 잘 알겠지만 키보드에서 Ctrl+Z를 입력하면 파일 끝을 읽게 되고, 이를 이용해 Box 객체 크기 순차열 입력이 끝났다는 것을 탐지할 수 있다. write() 함수는 타입 이름 다음에 괄호 사이에 Box 객체의 크기를 출력한다. 현재 객체의 타입 이름은 typeid 연산자의 실행 결과인 type_info 객체의 name() 멤버를 호출해서 얻을 수 있다. 따라서 출력되는 각 객체의 타입을 출력에서 확인할 수 있다.