인프런 커뮤니티 질문&답변

롤로노이님의 프로필 이미지
롤로노이

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

연산자 오버로딩 #2

연산자에 대한 질문이 있어서 올려봅니다

작성

·

270

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

엄연히 다릅니다.

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 씩 증가시키고
원본 객체를 반환합니다.

 

롤로노이님의 프로필 이미지
롤로노이

작성한 질문수

질문하기