Programming/C++ Language

static_cast 와 dynamic_cast

Jorten 2015. 1. 7. 11:16

static_cast

: 컴파일러에게, 모든 형 변환에 대해 허용하도록 해주는 구문. 이 형변환에 대한 모든 책임은 프로그래머가 진다.

Car* pCar = new Truck();

Truck* pTruck = static_cast<Truck*>pCar;

pTruck->drive();

정상동작.

Car* pCar = new Car();

Truck* pTruck = static_cast<Truck*>pCar;

pTruck->drive();

비정상동작.

: 따라서, 정말 필요한 경우에만 제한적으로 사용하는 것이 좋다.

: 부모 포인터를 자식 포인터로 변환할때, 의도적으로 한다는 것을 표현할때 좋다.


dynamic_cast

: 상속관계에서의 안전한 형 변환

: 자식 객체의 포인터 및 참조형 변수를 부모형 포인터 및 참조형 변수로 형 변환 해주는데 사용 된다.

Car* pCar = new Truck();

Truck* pTruck = dynamic_cast<Truck*>pCar;

컴파일 에러

Car* pCar = new Car();

Truck* pTruck = dynamic_cast<Truck*>pCar;

컴파일 에러

Car* pTruck = new Truck();

Car* pCar = dynamic_cast<Truck*>pTruck;

컴파일 성공