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

세상으로님의 프로필 이미지
세상으로

작성한 질문수

홍정모의 따라하며 배우는 C++

9.5 증감 연산자 오버로딩 하기

9.5 증감연산자에서 예제 실행이 이상해요

작성

·

332

1

결과값이 위 그림과 같이 32758로 이상하게 나옵니다

그런데 아래와 같이 friend 함수에서 입력 파라미터에서 const와 reference를 없애니 정상적으로 나옵니다.

답변 2

2

세상으로님의 프로필 이미지
세상으로
질문자

아 그러네요.

감사합니다.^^

1

안녕하세요, 답변 도우미 Soobak 입니다.

원인은 friend 함수 부분이 아니라, 후위 증가 연산자(++) 의 구현 부분 중 반환 자료형입니다.
작성 과정 중에 오타가 생기신 것 같습니다.

전위 증감 연산자는 객체 자체를 증가시키고, 그 증가된 객체를 반환합니다.
하지만, 후위 증감 연산자는 객체를 증가시키기 전의 상태를 반환해야 합니다.
이를 위해, 일반적으로 객체의 복사본을 만들어서 복사본을 반환합니다.

하지만, 질문자님의 코드에서는 후위 증가 연산자의 반환 자료형이 참조형으로 되어있습니다.
따라서, 함수 내의 임시객체 temp 가 파괴되면서 그 메모리 주소에 저장된 쓰레기 값을 반환하는 것입니다.
Digit& operator ++ (int); 로 정의된 부분을 강의에서와 같이 Digit operator ++ (int) 로 수정해보세요.

올바른 코드는 다음과 같습니다.

Digit operator++(int)
{
  Digit temp = *this;
  ++(*this);
  return temp;
}

 

세상으로님의 프로필 이미지
세상으로

작성한 질문수

질문하기