출처: http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=Yyu+UAy6QQtcJthWPuhYwSbTjtn1vgbk&qb=7Jew7IKw7J6QIG9wZXJhdG9y&enc=utf8&pid=fAMLzloi5U4sstUs4iwsss--143245&sid=SiOHr8puI0oAACuvcrw
어떤 코드를 분석하는 중에
특정 클래스 안에 아래와 같은 코드가 있었습니다.
operator HWND() const { return hWnd; }
hWnd란 이 클래스의 내부 멤버로 WinMain에서 핸들을 받아오는것이고요
위의 연산자 오버로딩 함수는 그 클래스의 멤버함수입니다.
저걸 어떻게 해석하면 좋을까요?
어떻게 생각하면 연산자 오버로딩이 아니라
인자가 없는 HWND라는 함수가 반환형을 operator 형으로 갖는것 같기도 하고
연산자 오버로딩으로 HWND를 재정의(??) 한 것 같기도 하고...
그렇지만 연산자가 반환형이 될 수는 없겠지요?
operator는 어디까지나 연산자 오버로딩에 대한 키워드지 데이터 형이 아니니까요.
그럼 연산자 오버로딩이란 소린데 위의 구문에서 보면
반환형도 지정되 있지 않고(형을 지정하지 않으면 기본 int이니
int로 처리될지도 모르겠지만...)
뒤에 연산자를 지정하지도 않았습니다. 설마 HWND() 전체가 연산자인건 아니겠고요.
연산자 오버로딩에 대해 잘 아시는 분은 꼭 알려주시기 바랍니다.
의견 쓰기
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
re: 연산자 오버로딩에서 operator가 반환형이 될수도 있나요? |
|
---|
아하... 그럼 형변환연산을 오버로딩한 것이군요? 이야... 신기하네요. 형변환 연산도 오버로딩이 된다니... 감사합니다. ^^
형변환 연산자입니다.
어떤 데이터형을 다른 데이터형으로 변환시켜주는 방법을 정의해 줍니다.
예로 double이 변형되어 int로 저장되는 것도 형변환방법에 따라
변경되어야 제대로 변경이 되죠. 물론 이정도는 컴파일러에서 기본으로
되는 것이지만요
예로 서로 다른 두 종류의 클래스
classA A;
classB B;
가 있을 때
A = B;
또는
void func(classA in);
...
func(classB);
와 같이 알아서 형변환이 되어서 사용되어야 하는 경우에 정의해 주면
편리하게 사용할 수 있습니다.
아래는 실제 코드로 만든 예제입니다.
int값을 데이터로 가지는 Point라는 클래스와
double값을 데이터로 가지는 Position이라는 두 클래스가 있을때
Position => Point로 의 형변환을 정의해 준 것입니다.
----------------------------------------------------------------------
#include
using namespace std;
class Point{
public:
int x; int y;
Point() {};
Point(int in_x, int in_y) : x(in_x), y(in_y) {};
};
class Position{
public:
double x;
double y;
Position(double in_x, double in_y) : x(in_x), y(in_y) {};
operator Point() const { return Point((int)x, (int)y); };
};
int main(){
Position A(3.7, 12.8);
Point B;
B = A;
cout << B.x << endl;
cout << B.y << endl;
return 0;
}
어떤 데이터형을 다른 데이터형으로 변환시켜주는 방법을 정의해 줍니다.
예로 double이 변형되어 int로 저장되는 것도 형변환방법에 따라
변경되어야 제대로 변경이 되죠. 물론 이정도는 컴파일러에서 기본으로
되는 것이지만요
예로 서로 다른 두 종류의 클래스
classA A;
classB B;
가 있을 때
A = B;
또는
void func(classA in);
...
func(classB);
와 같이 알아서 형변환이 되어서 사용되어야 하는 경우에 정의해 주면
편리하게 사용할 수 있습니다.
아래는 실제 코드로 만든 예제입니다.
int값을 데이터로 가지는 Point라는 클래스와
double값을 데이터로 가지는 Position이라는 두 클래스가 있을때
Position => Point로 의 형변환을 정의해 준 것입니다.
----------------------------------------------------------------------
#include
using namespace std;
class Point{
public:
int x; int y;
Point() {};
Point(int in_x, int in_y) : x(in_x), y(in_y) {};
};
class Position{
public:
double x;
double y;
Position(double in_x, double in_y) : x(in_x), y(in_y) {};
operator Point() const { return Point((int)x, (int)y); };
};
int main(){
Position A(3.7, 12.8);
Point B;
B = A;
cout << B.x << endl;
cout << B.y << endl;
return 0;
}