'자동 형 변환'에 해당되는 글 1건

  1. 2012.10.08 임시객체로 자동 형 변환과 형 변환 연산자(Conversion Operator)

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





32행을 조금 풀어서 쓰면 다음과 같다.


num = Number(30);                            // 1단계. 임시객체의 생성

num.operator=(Number(30));            // 2단계. 임시객체를 대상으로 하는 대입 연산자의 호출


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


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


때문에 위의 예제에서는 'Number형 객체가 와야 할 위치에 int 형 데이터가 와서, int 형 데이터를 인자로 전달받는 Number 클래스의 생성자 호출을 통해서 Number 형 임시객체를 생성한 것' 이다.


이렇듯, 기본 자료형 데이터를 객체로 형 변환하는 것은 적절한 생성자의 정의를 통해서 얼마든지 가능하다. (반대로 객체를 기본 자료형 데이터로 형 변환하는 것도 가능하다)






앞서 정의한 Number 클래스를 대상으로 덧셈연산이 가능하게끔 하는 예제




위 예제에서 정의한 형 변환 연산자는 다음과 같다.


operator int()

{

return num;

}


이렇듯 형 변환 연산자는 반환형을 명시하지 않는다. 하지만 return 문에 의한 값의 반환은 얼마든지 가능하다.

그리고 오버로딩 된 연산자의 이름이 operator+ 이면, + 연산자가 등장했을 때 호출되는 것과 유사하게 operator int 는 다음의 의미로 이해하면 된다.


int 형으로 형 변환해야 하는 상황에서 호출되는 함수이다.


※ int 형 말고도 다른 자료형의 이름이 올 수 있다.


즉, int 형으로 형 변환되어야 하는 상황에서 호출이 되며, 이 때 return 문에 의해 반환되는 값이 int 형으로의 형 변환 결과가 되는 것이다.


Number num2 = num1+20;


num1 객체의 operator int 함수가 호출되어, 이 때 반환되는 값 30과 20의 덧셈연산이 진행되며, 이 연산의 결과로 num2 객체가 생성된 것이다.

'Programming > C++' 카테고리의 다른 글

Template  (0) 2012.10.10
string 클래스의 디자인  (0) 2012.10.09
()연산자 오버로딩과 펑터(Functor)  (0) 2012.10.07
스마트 포인터  (0) 2012.10.04
포인터 연산자 오버로딩  (0) 2012.10.04
Posted by scii
: