항목 39. 계층도의 아래쪽 클래스로 다운캐스트 하지 않도록 한다.
캐스트(cast)란? 사전적 의미 : http://endic.naver.com/endic.nhn?docid=182460&rd=s
형 변환을 말하며,
C 스타일은 (원하는 형) 으로 쓴다. 예) int a = 3; (double)a .....; 식
C++ 스타일 4종 캐스트 변환이 있으며, 기존 C를 보다 구체적으로 분류하여 가독성과 안정성을 고려한방식이다.
static_cast, dynamic_cast, const_cast, 절대권력자 reinterpret_cast 사용법은 인터넷에 널려 있다.
그렇다면 다운 캐스트(down cast)란?
부모클래스를 가리키는 포인터를 자식을 가리키는 포인터로 바꾸는것 을 다운 캐스트라 한다.
(부모에서 자식으로 포인터가 내려갔으니)
이유
1. 타입 변환은 이브의 사과에 해당한다. (필자 표현력 쥑이네!)
2. 코드 이해가 힘들어 지고, 잘못된 연산을 할 위험이 많이 발생된다.
3. 해당 포인터가 무엇을 가리키는 포인터인지 파악하고.. 분석하면서 분( 자신의 뺨을 때려라! 찰싹!)
- 이런 방법은, C++에서 사용하지 않으며, 사용할수도 없다!(가능하지만 사용할수도 없는게 맞는 표현이다)
- (번역을 잘하는건지 재미있게 읽힌다.)
해결 방법
1. 되도력 쓰지마!
2. 가상함수를 이용해!
- 가상 함수 사용시 유의점은 .. 전 항목에서 설명되어졌다.
3. 부득이하게 쓸때는 dynamic_cast 로 확인해 보며 사용해라.
(3번의 방법은 2번에 비해 아주 열등한 방법이고, 반드시 .. 방법이 없을때만 사용해야 한다, dynamic_cast로 포인터의 시작점을 찾을수 있다고 한다.)
개인적인 말
1. C++ 스타일일 캐스트를 알고 부터, C++ 스타일만 쓴다. 그 결과 확실히 가독성 및 안정성이 확보되었다.
2. reinterpret_cast 의 경우 스펠링을 외우지 않는다. .. 안쓸꺼니까!(라고 했지만 이미 외웠다. 부득이할때만 쓰자.)
3. .. .. 사실 캐스트는 주의가 필요한 연산잗,.. 그걸 보정하는 작업이 더 힘들기 때문이다.
캐스트(cast)란? 사전적 의미 : http://endic.naver.com/endic.nhn?docid=182460&rd=s
형 변환을 말하며,
C 스타일은 (원하는 형) 으로 쓴다. 예) int a = 3; (double)a .....; 식
C++ 스타일 4종 캐스트 변환이 있으며, 기존 C를 보다 구체적으로 분류하여 가독성과 안정성을 고려한방식이다.
static_cast, dynamic_cast, const_cast, 절대권력자 reinterpret_cast 사용법은 인터넷에 널려 있다.
그렇다면 다운 캐스트(down cast)란?
부모클래스를 가리키는 포인터를 자식을 가리키는 포인터로 바꾸는것 을 다운 캐스트라 한다.
(부모에서 자식으로 포인터가 내려갔으니)
이유
1. 타입 변환은 이브의 사과에 해당한다. (필자 표현력 쥑이네!)
2. 코드 이해가 힘들어 지고, 잘못된 연산을 할 위험이 많이 발생된다.
3. 해당 포인터가 무엇을 가리키는 포인터인지 파악하고.. 분석하면서 분( 자신의 뺨을 때려라! 찰싹!)
- 이런 방법은, C++에서 사용하지 않으며, 사용할수도 없다!(가능하지만 사용할수도 없는게 맞는 표현이다)
- (번역을 잘하는건지 재미있게 읽힌다.)
해결 방법
1. 되도력 쓰지마!
2. 가상함수를 이용해!
- 가상 함수 사용시 유의점은 .. 전 항목에서 설명되어졌다.
3. 부득이하게 쓸때는 dynamic_cast 로 확인해 보며 사용해라.
(3번의 방법은 2번에 비해 아주 열등한 방법이고, 반드시 .. 방법이 없을때만 사용해야 한다, dynamic_cast로 포인터의 시작점을 찾을수 있다고 한다.)
개인적인 말
1. C++ 스타일일 캐스트를 알고 부터, C++ 스타일만 쓴다. 그 결과 확실히 가독성 및 안정성이 확보되었다.
2. reinterpret_cast 의 경우 스펠링을 외우지 않는다. .. 안쓸꺼니까!(라고 했지만 이미 외웠다. 부득이할때만 쓰자.)
3. .. .. 사실 캐스트는 주의가 필요한 연산잗,.. 그걸 보정하는 작업이 더 힘들기 때문이다.
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 44. 의미하는 바를 표현하도록 하라; 자신이 표현한 것의 의미를 이해하도록 하라. (0) | 2008.05.14 |
---|---|
항목 43. 다중 계승을 바르게 사용하도록 하라 (1) | 2008.05.14 |
항목 42. private 계승을 바르게 사용하라. (0) | 2008.05.14 |
항목 41. 계승과 템플릿과의 차이점을 이해한다. (0) | 2008.05.14 |
항목 40. 레이어링을 통해 가지고 있는 것과 사용하여 구현된것을 모델링하도록 한다. (0) | 2008.05.12 |
항목 38. 계승된 부재 인자값을 재정의하지 않도록 한다. (0) | 2008.05.12 |
항목 37. 계승된 비가상 함수를 재정의하지 않도록 한다. (2) | 2008.05.12 |
항목 36. 인터페이스 계승과 구현의 차이점을 이해해라 (0) | 2008.05.12 |
항목 35. public 계승이 isa를 모델링하도록 하라. (0) | 2008.05.11 |
인스턴스와 객체지향 설계 (0) | 2008.05.11 |
최근댓글