Programming

[C++] 동일 클래스 내 다른 생성자 호출에 관하여

minigb 2021. 5. 14. 14:51
class Dot {
public:
	int x, y;
	Dot() {}
	Dot(int x_, int y_) {
		x = x_;
		y = y_;
	}
	Dot operator = (Dot t) {
		x = t.x;
		y = t.y;
		return { x, y };
	}
};

class LineSegment {
public:
	Dot d1, d2;
	LineSegment(Dot dot1, Dot dot2) {
		d1 = dot1;
		d2 = dot2;
	}
	LineSegment(int x1, int y1, int x2, int y2) {
		LineSegment(Dot(x1, y1), Dot(x2, y2));
	}
};

이렇게 작성하고 LineSegment(int x1, int y1, int x2, int y2) 생성자 호출 시 Dot d1, d2가 제대로 초기화 되지 않는다.
동일한 클래스 내 다른 생성자인 LineSegment(Dot(x1, y), Dot(x2, y2))를 호출하지만, 그 생성자가 만든 객체의 내용이 현재 객체에 반영되는 건 아니니까.

적고 보니 너무 당연한 얘기다.

이를 해결하는 방법이 두 가지 있는데

LineSegment(int x1, int y1, int x2, int y2) { *this = LineSegment(Dot(x1, y1), Dot(x2, y2)); }

이렇게 새로운 생성자가 만든 객체를 취하거나

LineSegment(int x1, int y1, int x2, int y2) : d1(Dot(x1, y1)), d2(Dot(x2, y2)) {}

이렇게 현재 객체의 Dot d1, d2 변수를 초기화해주면 된다.

후자의 방법이 더 좋은 거 같다.