모두의 코드 커뮤니티

내가 만든 연산자 오버로딩 관련 질문

의 내용중에 operator+의 리턴을 value로 할지 reference를 붙일지에 대한 내용이 있습니다.
강의 내용에서는 사칙연산의 경우 reference가 아닌 value를 return해야 한다고 나와 있습니다.

이부분이 잘 이해가 되지 않습니다.

가령 코드가 아래와 같을 경우
Complex Complex::operator+(const Complex& c)
{
real = real + c.real;
img = img + c.img;

return *this;

}


Complex a(1.0, 2.0);
Complex b(3.0, -2.0);

Complex c = b + a + b;

c의 예상 결과 값은 (7, -2)이 나와야 할듯 한데 실제로 돌려보면앞의 b + a 에 의해서 b 객체가 (4, 0 )이 되고 그 뒤의 +b에 의해서 (8,0)이 됩니다.
이때 return을 reference로 하나 value로 하나 결과는 동일하게 (8,0)이 됩니다.

무엇이 문제인가요?

좋아요 1

Complex 객체를 새로 만든 후에 real 과 img 를 바꿔야지 위와 같이 하시면 b 자체의 값을 b + a 한 값으로 바꾸게 됩니다.