모두의 코드 커뮤니티

Complex 클래스 설명에서 질문이 있습니다

Complex& operator+(const Complex& c) {
real += c.real;
img += c.img;
return *this;
}
로 잘못 생각하는 경우도 있습니다.

이렇게 설명하신 부분에서,

하지만, 실제로 처리되는 것을 보자면, (b.plus(c)).plus(b) 가 되는데, b.plus(c) 를 하면서 b 에는 (b + c) 가 들어가고, 거기에 다시 plus(b) 를 하게 된다면 값 자체만 보자면 (b + c) + (b + c) 가 되서 (왜냐하면 현재 b 에는 b + c 가 들어가 있으니까) a = 2 * b + 2 * c 가 되기 때문입니다.

이 문장에 왜 ‘b’ 에는 ‘b+c’ 가 들어간다는 것인지 잘 이해가 되지 않아서 질문드립니다.

보시다시피 operator+ 가 *this 의 레퍼런스를 리턴하고 있습니다. 그렇다면

b.plus(c) 를 하게 되면 bb + c 한 값이 들어가겠죠? 따라서

b.plus(c) 를 한 후에 한 번 더 .plus(b) 를 하게 되면 실제로는 이전의 b 가 더해지는 것이 아니라 b + c 의 값이 더해진다는 의미 입니다.

아… 여러번 곱씹고 나서야 이제 이해가 되었어요.
b.plus© 한 이후에 b -> (b+c) 가 바뀐 상태이고,
결국 한번 더 .plus(b) 할 땐 (b+c).plus(b+c) 가 되는 거군요.

객체를 리턴하는 경우와 객체 레퍼런스를 리턴하는 경우의 차이를
좀 더 잘 이해하고 넘어가야겠네요.

답변 감사합니다.