[C++] dynamic_cast
dynamic casting 은 상속관계 내의 downcasting에 사용된다.
[예제 1]
출력:Go Dog
1)과 3)은 자신의 객체를 할당한 것이고, 2) 는 부모 객체에 자식 객체를 할당한 것이다.
위에서 부터 보면 자식의 객체에 부모 객체를 넣으려고 한다.
그러나 아래와 같은 에러를 생성하고 실ㅋ패
error C2440: '=' : 'Animal *'에서 'Dog *'(으)로 변환할 수 없습니다.
1> 기본 형식에서 파생 형식으로 캐스팅하려면 dynamic_cast 또는 static_cast가 필요합니다.
그래서 그 에러 말대로 dynamic_cast를 넣어보았다. 하지만 런타임 에러!!
왜냐하면 pDog와 pAnimal이 가리키는 타입이 다르기 때문이다.
dynamic_cast는 포인터나 참조자의 타입을 downcasting하는 것이지 객체의 타입을 casting하지는 못한다.
dynamic_cast는 casting에 실패할 때 대상이 pointer라면 NULL을 리턴하고, 참조자라면 bad_cast를 던진다.
이것이 안전한 타입의 캐스팅을 의미한다.
굵은 부분에서 dynamic_cast 의 기본 동작을 볼 수 있다.
둘다 Animal객체 인데 위와는 달리 굵은 부분에서 casting이 성공한 이유는
pAnimal 은 new Animal로 객체화되었고, pDog1은 new Dog로 객체화 되었기 때문이다.
마지막 pDog = pDog2 는 당연히 성공
[예제 2]
출력:Go miso
첫번째는 당연히 에러를 발생시킨다.
error C2440: '=' : 'Female *'에서 'Person *'(으)로 변환할 수 없습니다.
1> 가리킨 형식이 관련이 없습니다. 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.
[예제 2]의 굵은 부분을 보면 한 클래스가 다중상속한 일반 클래스 사이에도 dynamic_cast가 가능하다는 것을 볼 수 있다.
[예제 1]의 경우 downcasting이라고 하고, [예제 2]는 crosscasting 이라고 한다.
틀린것을 알려주시면 정말 감사하겠어요'ㅅ ')/