임시객체로 자동 형 변환과 형 변환 연산자(Conversion Operator)
Programming/C++ 2012. 10. 8. 02:12 |두 객체의 자료형이 일치할 때에만 대입연산이 가능하다.
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 |