이게 무슨 말인가?
타입 변환이 되는 경우를 생각해 보면
1. 함수의 매개변수에 넣는 인자가 암시적으로 타입 변환되는 경우
2. 기본형 변수 중 서로 다른 형을 같이 연산하고자 할때

그런데 이게 모든 매개변수에 대해 적용되어야 한다면??
여기서 모든 매개변수란 함수의 인자가 매개변수로 넘어갈때 모든 매개변수에 대해 타입 변환이 일어나게 할려면 이라는 뜻 같은데, 실제 코딩에선 많이 필요로 하지 않았지만, 책을 보면, 유리수 연산을 그 예로 들고 있다. 뭐, 이건 사용자가 어떻게 변하는지 안다면 다른 형에 대해서도 쓸수 을듯(.. 이것을 모르면, 암시적 타입 변환의 예 를 찾아 보는게 좋겠다)

비멤버 함수로 선언해라?
아... 여기서 눈치 챈 사람도 많겠지만, 풀어 버린다면, 멤버 함수로 넣게 되면, 자기 자신의 객체에 의해서 함수가 호출되게 되는데, operator 는 항상 오른쪽을 인자로 쓰기 때문이다. 소스를 보자면,

result = onehalf * 2

풀어 쓴다면 onhalf.operator*(2); 이런식으로 바뀐다. 하지만

result = 2 * onehalf;

풀어 쓴다면 2.operator*(onehalf); 이런식.. 하지만 이건 컴파일 에러 난다.
이것이 멤버 함수의 한계(?) 이다.

비멤버 함수는 멤버 함수의 한계 없이, operator*(A, B) 로 호출이 되어, 좌 우 인자를 매개변수에 넣을수 있을수 있다!


이것만은 잊지 말자!
1. 모든 매개변수에 대해 타입 변환을 해 줄 필요가 있다면, 그 함수는 비멤버 함수여야 한다.

관련링크
http://redinlife.egloos.com/1626711
http://ikpil.tistory.com/309





posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요