초기화 리스트를 쓰는 예
초기화 리스트는 클래스의 생성자를 호출 또는 그 상속관계까지 겹쳐 있을 때,
여러번의 함수를 호출하는 것으로부터 오는 성능지연방지를 위해 좋은 코드로써 도움을 준다.
아래와 같은 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를 가정
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하는 효과다.
그래서 처음부터 초기화시에 필요한 숫자로 초기화하기 위해 초기화리스트를 이용하면,
호출되는 함수의 갯수가 현저히 줄어든다.
'I.T > Programming' 카테고리의 다른 글
[C#]Visual Studio .Net 에서 MDA 오류로 디버깅 못할 때 (0) | 2013.02.07 |
---|---|
[C/C++]클래스 상속에 관련한 간단한 예제 (0) | 2013.01.10 |
[C/C++]알 수 없는 크기의 객체 다수 생성시 - 객체 배열, 포인터 배열 (0) | 2013.01.10 |
[Java]byte[] OutParameter, 리턴 값 다수(Return Data) 등의 방법 모색(Final) (0) | 2011.11.21 |
[Java] File Dialog, File Open, File Read, File Save, File Excute (1) | 2011.10.20 |