class Point

{

private:

int xpos;

public:

Point(int x=0):xpos(x){}

void Show()const

{

cout << xpos << endl;

}

friend Point operator--(Point &ref);

};

Point operator--(Point &ref)

{

cout <<"처음값:"<< ref.xpos << endl;

ref.xpos -= 1;

ref.Show();

cout <<"연산후 값:"<< ref.xpos << endl;

ref.Show();

return ref;

}

int main()

{

Point pos(5);

--(--(--pos));

pos.Show();

}

존나 간단한 건데 예전꺼 복습겸 참조자 증명하다가 혼자 예제 만들면서 내가생각한게 맞는지?

참조자로 넣어서 참조자로 반환하면 메인에서 출력값이 2가 나오는건 당연한거고

여기서 

(1) 반환형을 위에처럼 한다해도 생각에는 들어가는게 참조자로 들어가니 main 에서 출력하면 2가 나올거라 생각하겠지만 4가 나온다.

(2) 그런데 웃긴건 연산자 오버로딩 함수내에서는 2까지 쭉쭉내려가다가 메인에서는 4가 나온다

(3) 왜냐하면 처음 연산되는 --pos는 pos의 참조로 들어가고 그 이후로 되는 --연산은 ref의 참조로 들어가기때문임 그리고 연산이 다되면 ref는 날라감

(4) 고로 메인에서도 2를 뿌려줄려면 참조의 값을 반환시키고 다시 그 참조값을 넣어줘야함


이게 맞는거냐? 아니면 다른거냐 확신이 안선다