1. C언어에서의 형변환 - 기본적으로 ()를 사용하여 형변환을 합니다. - 대부분의 형변환을 할 수 있습니다. ex1) 50-1.c
- 실행결과
2. dynamic_cast<> - 상속관계 안에서 포인터나 참조의 타입을 기본클래스에서 파생클래스로 다운캐스팅을 할 수 있습니다. - 다중상속에서 기본클래스간의 캐스팅을 지원합니다. - 다형성과 관계있기 때문에 virtual함수가 하나 이상 있어야 됩니다. 예제) 50-3.cpp
- 컴파일 결과
- 컴파일 결과에서도 나오듯이 다형성이 아니다해서 에러를 발생 시키는 것을 볼 수 있습니다. - 그럼 virtual 선언을 하고 컴파일을 다시 해보겠습니다.
예제)50-5.cpp
- 실행 결과
- 위의 결과를 보면 실제 기본클래스(Shape)를 파생클래스(Point)로 캐스팅해서 포인터를 지정할려고 했으나(34~35) 0(NULL)포인터를 반환해버립니다. 이런것을 봐서는 실제 객체의 타입을 가지고 변환하는 것이 아니라 포인터 자체만 변경하므로 실제로 할당하지 못하기 때문에 NULL포인터를 반환하는 것 같습니다. (실제로 파생클래스의 포인터에 기본클래스를 할당할 수는 없죠?)
- 위 결과를 받쳐주는 결과가 바로 37~38번째 줄입니다. pPoint1의 포인트 형이 Shape라고 해도 실제 형태는 Point형이므로 포인터에 할당할 수 있습니다.
- 다중상속 관계에서의 캐스팅 : 비슷한 경우기는 하지만 실제 다중상속관계에서도 허용되는 캐스팅을 나타내고 있습니다. 이것도 위의 경우와 같이 포인터 자체만 캐스팅 되므로 캐스팅 후 할당 가능 여부에 따라 결과값이 달라집니다.