반응형

초기화 리스트를 쓰는 예

초기화 리스트는 클래스의 생성자를 호출 또는 그 상속관계까지 겹쳐 있을 때,
여러번의 함수를 호출하는 것으로부터 오는 성능지연방지를 위해 좋은 코드로써 도움을 준다.

아래와 같은 Point Class가 있다고 가정

 class Point {
private:
 int m_x, m_y;

public:
 void Print() const;
 void Print(const char* name) const;

 explicit Point(int x=0, int y=0);
 ~Point();

 int GetX() const { return m_x; }
 int GetY() const { return m_y; }
 inline void SetX(int x);
 inline void SetY(int y);
};

이 Point Class를 이용하여 좌상점, 우하점을 관리하는 Rect Class를 가정

  class Rect{

private :
 Point m_LeftTop, m_RightBottom;

public:
 Rect(); //아무것도 안함(0,0,0,0)
 ~Rect();
 Rect(int left, int top, int right, int bottom);

 void Print() const;
 int GetWidth() const;
 int GetHeight() const;

 void SetRect(const Point& lefttop, const Point& rightbottom);
 void SetRect(int left, int top, int right, int bottom);
};

Rect(int left, int top, int right, int bottom)의 생성자를 채워넣을 때,

Rect::Rect(int left, int top, int right, int bottom) {
 m_LeftTop.SetX(left);
 m_LeftTop.SetY(top);
 m_RightBottom.SetX(right);
 m_RightBottom.SetY(bottom);
}
이렇게 할 수도 있고,,,

Rect::Rect(int left, int top, int right, int bottom)
 :m_LeftTop(left,top), m_RightBottom(right, bottom) 
{
}
이렇게 할 수도 있다.
(0,0,0,0)으로 생성자를 호출한 뒤 다시 일일히 숫자를 바꿔넣는 것과 똑같다.
즉 기본으로 생성한 뒤, Set하는 효과다.
그래서 처음부터 초기화시에 필요한 숫자로 초기화하기 위해 초기화리스트를 이용하면,
호출되는 함수의 갯수가 현저히 줄어든다.

 

반응형
Posted by Rainfly
l