클래스의 생성자 호출 순서는 다음과 같다.
class PipeStream : public Stream
{
Buffer buffer;
public:
// 아래처럼 코드상 버퍼를 먼저 초기화 한다고 해도 C++ 규칙상 생성자 호출 순서는 변하지 않는다.
PipeStream() : buffer(1024), Stream(buffer) {}
};
기반 클래스인 Stream 생성자 보다 Buffer 생성자를 먼저 호출하게 하려면
class PipeBuffer
{
protected:
Buffer buffer{1024};
}
// PipeBuffer 를 먼저 상속받는다.
// PipeBuffer 가 먼저 초기화 되고 그 뒤 Stream이 초기화 된다.
class PipeStream : public PipeBuffer, public Stream
{
public:
PipeStream() : Stream(buffer) {}
}