이게 무슨 말인가?
타입 변환이 되는 경우를 생각해 보면
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
타입 변환이 되는 경우를 생각해 보면
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
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 29: 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! (0) | 2008.07.01 |
---|---|
항목 28: 내부에서 사용하는 객체에 대한 '핸들'을 반환하는 코드는 되도록 피하자. (0) | 2008.06.28 |
항목 27: 캐스팅은 절약, 또 절약! 잊지 말자. (0) | 2008.06.26 |
항목 26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자. (0) | 2008.06.25 |
항목 25: 예외를 던지지 않는 swap에 대한 지원도 생각해 보자 (0) | 2008.06.24 |
항목 23: 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자. (0) | 2008.06.07 |
항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (0) | 2008.06.07 |
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2008.06.07 |
항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다. (0) | 2008.06.06 |
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2008.06.05 |
최근댓글