강의

멘토링

커뮤니티

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

asdfaa22님의 프로필 이미지
asdfaa22

작성한 질문수

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

9.8 형변환을 오버로딩 하기

9.8[3:40] Dollar -> cents 변환 문제

작성

·

222

1

안녕하세요, 

Cents 클래스와 Dollar클래스를 이용하여

Dollar -> cents로 변환을 하고있는데,

메인함수에서 Cents cents = dol;

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

제가 이해한 프로세스가

1 .Dollar dol(3); 으로 선언

2. Dollar 클래스 안에 operator Cents()로

Cents로 형변환 오버로딩이 실행되서 dol(3)의 타입이

Cents가 됨.

3. 따라서, 메인함수의 cents객체에 대입 가능

(Cents가 사용자 정의 타입이므로)

제가 이해한게 맞나요..?

답변 1

10

안녕하세요 :)

double a;

int b = 2;

a = b;

이런 느낌이라고 생각하시면 되요!

저렇게 대입한다고 해서 b 가 a 가 되는 것은 아닙니다. b 는 그대로 int 이구요. 

b 의 "사본"을 double 로 형변환하여 a 가 받는다고 생각하시면 됩니다.

저 과정을 한다고 해서 b 또한 double 이 되는 것은 아니죠! b 의 값을 복사하여 이 복사한 b 의 값을 형변환하여 a 에 대입하는 것일 뿐입니다.

위 과정을 모두 끝내고나면 a 는 2.000000 가 되고 b 는 여전히 2 일 것입니다.

질문주신 코드도 마찬가지입니다.

Cents cents = dol; 은 dol 객체값을 cents 에 대입하려는 행위이기 때문에 cents 를 dol 의 사본으로 만드는 행위와도 같습니다.

둘의 자료형이 맞지 않으므로 dol 을 복사한 사본값이 Cents 로 형변환되어야 합니다. 

그러는 과정에서 dol 객체의 operator Cents() 가 자동으로 호출되고 Cents(m_dollars * 100); 를 리턴하고 이 리턴값을 cents 가 받습니다.

최종적으로 dol 의 사본을 Cents 로 형변환한 결과가  Cents(m_dollars * 100) 인 것이나 마찬가지입니다. 이 것을 cents 가 리턴받게 됩니다.

" dol(3)의 타입이 Cents가 됨." 라고 말씀하셔서 dol 객체 원본 또한 Cents 가 된다고 혹여나 오해하시는 것은 아닌가 싶어서 설명 드려보았습니다...!

asdfaa22님의 프로필 이미지
asdfaa22
질문자

감사합니다!

asdfaa22님의 프로필 이미지
asdfaa22

작성한 질문수

질문하기