본문 바로가기
스터디/C++

[ C++ ] 임시객체로의 자동 형 변환과 형 변환 연산자(Conversion Operator)

by 알 수 없는 사용자 2019. 11. 28.

C++에서는 객체 간의 대입 연산을 허용한다.

 

 

 

( 객체의 자료형이 일치할 때만 대입 연산이 가능하다. )

 

그럼, 객체와 정수간의 대입 연산도 가능할까?

 

가능하다.

 

그럼, 어떤 과정을 통해서 위의 결과가 나오는지 자세히 살펴보겠다.

 

자세히 보면 Num 생성자가 두번 일어난 것을 확인할 수 있다.

 

먼저 객체 n이 생성할 때 한번,

Num n; 

 

그리고 n = 20을 연산할 때 한번 일어난다.

n = 20;

 

즉, 연산을 위해서 임시 객체가 생성된 것을 확인할 수 있는데, 좀 더 풀어보면

n = 20;
n = Num(20); // 임시객체 생성
n.operator=(Num(20)); // 임시객체를 대상으로 하는 대입 연산자 호출

 

이런 과정을 가진 것을 확인할 수 있다. 

그리고 이러한 임시 객체의 생성을 통해서 대입 연산이 진행되는 데에는 다음과 같은 문법적 기준이 존재한다.

 

" Num형 객체가 와야 할 위치에 다른 형식의 데이터 또는 객체가 왔을 경우, 다른 형식의 데이터를 인자로 받는 Num형 클래스의 생성자 호출을 통해서 Num형 임시 객체를 생성한다."

 

즉, Num형 객체가 와야 할 위치에 int형 데이터가 와서 int형 데이터를 인자로 전달받는 Num 클래스의 생성자 호출을 통해서 Num형 임시객체를 생성한 것이다. 그리고 두 Num 객체로 대입 연산을 진행했다.

 

반대로 객체를 기본 자료형 데이터로 형 변환도 가능하다!

 

 

여기서

Num n2 = n1 + 30;

n1이 int 형으로 형 변환이 된 상황이다.

객체가 형 변환을 위해서는 형 변환 연산자가 필요한데

 

operator int ()
{
	return n;
}

이것이 형 변환 연산자이다.

형 변환 연산자는 반환형을 명시하지 않는다.

여기서 operator int는 int형으로 형 변환해야 하는 상황에서 호출되는 함수라고 생각하면 된다.

 

그래서 n2에는 20과 30의 덧셈 연산의 결괏값이 생성자에 대입된다.