UpdownCasting

1. static_cast

: 형변환을 위해 사용하는 cast / C언어에서 (int) 와 비슷한 역할을 한다.

: 해당 클래스가 잘못된 캐스팅 시 유효성 검사를 하지 않는다.

: Ex)

//Upcasting과 Downcasting
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = static_cast<CastBase*>(pStaticCast);
StaticCastTest* pDownCasting = static_cast<StaticCastTest*>(pStaticCast);

 

//잘못된 Casting의 예 static_cast는 이와 같은 잘못된 캐스팅에 대한 처리가 없다.
CastBase* pCastBase = new CastBase(5.f, 15, "CastBase");
StaticCastTest* pDownCasting = static_cast<StaticCastTest*>(pCastBase);

CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
DynamicCastTest* WrongCast1 = static_cast<DynamicCastTest*>(pStaticCast);

결과

쓰레기 값 및 의도하지 않은 값이 출력

 

더보기

코드 예시

쓰레기 값과 의도하지 않은 값이 출력
잘못된 캐스팅에 의해 크래시 발생 혹은 미정의 동작

 

 

2. dynamic_cast

: 형변환을 위해 사용하는 cast

: 해당 클래스가 잘못된 캐스팅을 하는 경우 nullptr 반환을 해준다.

//Upcasting과 Downcasting
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = dynamic_cast<CastBase*>(pStaticCast);
StaticCastTest* pDownCasting = dynamic_cast<StaticCastTest*>(pStaticCast);

 

//Dynamic 캐스팅
CastBase* pCastBase = new CastBase(5.f, 15, "CastBase");
StaticCastTest* pDownCasting = dynamic_cast<StaticCastTest*>(pCastBase);

CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = dynamic_cast<CastBase*>(pStaticCast);

결과

잘못된 캐스팅의 경우 nullptr 반환

더보기

코드 예시

잘못된 casting에 대해 nullptr 반환

 

3. const_cast

: const로 된 변수를 const_cast를 통해 보통의 변수로 캐스팅 할 수 있다.

//ConstCast
StaticCastTest* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
PointerTest* pTest = const_cast<PointerTest*>(pStaticCast->GetPointerTest());

 

더보기

코드 예시

const * 리턴하는 경우
이와 같이 받아서 처리하므로 값 변경이 불가능. 
const 키워드가 없으면 이와 같이 에러 발생
const_cast를 통해 이와 같이 값을 받을 수 있음.

 

4. reinterpret_cast

: 형에 상관 없이 Byte 단위의 캐스팅을 하는 reinterpret_cast.

 

 

 


WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,