작성
·
277
0
연산자 오버로딩 #2 강의에서
Position operator++(int)
{
Position ret=*this;
_x++;
_y++;
return ret;
}
이버전과
Position& operator++(int)
{
_x++;
_y++;
return *this;
}
이버전은 실제 차이가 없는게 아닌지 궁금합니다
어차피 return으로 리턴값을 받아올때 자기 자신의 주소값을 받아 오는데 *this 던 Position 의 ret에 복사 주소값을 받아오던 별차이가 없는게 아닌지 궁금합니다
아그리고 코딩하면서 생각해봤는데 윗버전은 좀 문제가 있어 보이는데 사실 이게 맞는게 아닌지 의문이 듭니다
Position operator++(int)
{
Position ret=*this;
_x=ret._x++;
_y=ret._y++;
return ret;
}
이렇게 되야 맞는말이 되는거 아닌지 그래야 말이 되는거 아닌가요?
답변 4
1
이해 됬습니다 한 30번쯤 돌려보니까 이해 됬네요 ㅋㅋ
지금까지 착각하고 있었던게
int a=0;
a++;
이리하면 a는 1이 되는거여서
만약 a++가
int b = a++;
이런식으로 된다면 지금까지 전 a도 1이고 b도 1인줄 알았는데 이걸 잘못알고 있었네요 ㅠㅠ
여기서 a는 1되고 b는 a가 1증가하기 전값인 0 이 되는거였는데 이부분을 잘못 이해하고 있어서 계속 이해가 되지 않는거였네요 ㅋㅋ 기초가 부족했던거 같았습니다
0
0
0
엄연히 다릅니다.
Position operator++(int)
{
Position ret=*this;
_x++;
_y++;
return ret;
}
이 버전에서는 주소값을 복사하는 개념이 아니라,
임시 객체를 만들어서 x, y 값을 복사해서 반환하고,
원본 객체의 _x _y를 각각 뒤늦게 1 증가시킵니다.
임시 객체와 원본 객체는 각각 다른 _x, _y값을 갖고 있게 됩니다.
Position& operator++(int)
{
_x++;
_y++;
return *this;
}
이 버전에서는 원본 객체의 _x, _y를 1 씩 증가시키고
원본 객체를 반환합니다.