기본 콘텐츠로 건너뛰기

라벨이 Cast인 게시물 표시

[C++] Cast에 대해서...

출처 AiWisdom님의 블로그 | 갱주니 원문 http://blog.naver.com/process3/20017834722 캐스트 연산은 주어진 식이 가지고 있는 형을 다른 형으로 강제로 바꾸는것입니다. C++에는 (C 시절부터 존재하는 C 스타일 캐스트를 제외하고) 다음 네 가지 종류의 캐스트 연산이 있습니다. dynamic_cast static_cast reinterpret_cast const_cast dynamic_cast dynamic_cast(e)는 부모 클래스와 자식 클래스의 관계에 있는 포인터 형 사이의 변환 또는 레퍼런스 형 사이의 변환을 수행하는데, 같은 형 사이의 변환 널 포인터의 변환 자식 클래스로부터 부모 클래스로의 변환 과 같은 '뻔한' 경우가 아니라면 e는 다형적 형(polymorphic type; 가상 함수가 포함된 클래스 형)의 좌변값이나 포인터여야 하며, 컴파일시에 변환이 이루어지는 다른 종류의 캐스트 연산과는 달리 실행시에 동적 형(dynamic type)에 근거한 변환이 시도되고, 변환의 성공 여부를 검사하는 의미도 함께 가지고 있습니다. 포인터의 경우 변환이 실패하면 결과값은 널 포인터가 되는데, 이를 if 등의 조건 검사에 활용할 수 있습니다. struct animal { virtual void ~animal(); }; struct dog : animal { void bark(); }; struct cat : animal { void mew(); }; void test(animal* a) { if (dog* d = dynamic_cast(a)) d->bark(); else if (cat* c = dynamic_cast(a)) c->mew(); } 레퍼런스의 경우 변환이 실패하면 헤더에 정의되어 있는 std::bad_cast 예외가 발생합니다. 즉 이는 주어진 변환...