«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
03-29 13:00
관리 메뉴

lancelot.com

Base from member 본문

프로그래밍

Base from member

lancelot50 2022. 7. 30. 15:26
  • 멤버 변수의 초기화를, 상속받는 부모클래스보다 먼저하고싶을때, 그 멤버 변수를 가지는 클래스를 만들어서, 부모클래스보다 앞에서 상속받으면 된다
  • 이렇게까지 해야하는 곳이 있을까.. 싶고, 상속 순서에 따라 초기화가 결정되도록 하면, 나중에 복잡해질 경우에 문제가 생기지 않을까.. 싶기도 한데...
  • 어쨌든 답답하면 써야지..ㅋ
#include<iostream>

class Buffer
{
public :
	Buffer(std::size_t size) { std::cout << "Initialize Buffer" << std::endl; }
};

class Stream
{
public:
	Stream(Buffer& buf) { std::cout << "Initialize Stream"<<std::endl; }
};

class PipeBuffer
{
protected:
	Buffer buffer{ 1024 };
};

class PipeStream : public PipeBuffer, public Stream
{
public :
	PipeStream() : Stream(buffer) {}
};

int main()
{
	// buffer 를 외부에 먼저 만들어두고, stream에서는 그것을 받아서 사용하는 구조
	Buffer buf(1024);
	Stream s(buf);

	// Base from member
	// PipeStream 은 buffer를 자기가 가지고 싶다면
	// buffer만 가진 PipeBuffer class로부터 상속받는 구조로 변경하고, 그 PipeBuffer를 Stream보다 먼저 상속
	PipeStream ps;
}