프로그래밍/C++

캐스팅

우대비 2022. 10. 24. 14:53
반응형
static_cast

dynamic_cast

const_cast

reinterpret_cast

1. STATIC_CAST

타입 원칙에 비춰볼 때 상식적인 캐스팅만 허용해준다

int hp = 100;
int maxHp = 200;
float ratio = static_cast<float>(hp) / maxHp;

// 부모->자식  자식->부모
Player* p = new Knight();
Knight* k1 = static_cast<Knight*>(p);

 

2.DYNAMIC_CAST

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

- RTTI ( RunTime Type Information)

다형성을 활용하는 방식

virtual 함수를 하나라도 만들면, 객체의 메모리에 가상 함수 테이블 (vftable) 주소가 기입된다.

ㅡ 만약 잘못된 타입으로 캐스팅을 했으면, nullptr 반환*************

ㅡㅡ 이를 이용해서 맞는 타입으로 캐스팅을 했는지 확인시 유용하다

Player* p = new Knight();
Knight* k2 = dynamic_cast<Knight*>(p);


3.CONST_CAST

ㅡ const_cast : const를 붙이거나 떼거나~

PrintName(const_cast<char*>("Rookiss"));

 

4.REINTERPRET_CAST

가장 위험하고 강력한 형태의 캐스팅

ㅡ're-interpret' : 다시-간주하다/생각하다

ㅡ 포인터랑 전혀 관계없는 다른 타입 변환 등

__int64 address = reinterpret_cast<__int64>(k2);

 

 

반응형
LIST

'프로그래밍 > C++' 카테고리의 다른 글

함수 객체  (0) 2022.11.01
함수포인터  (0) 2022.10.31
얕은 복사와 깊은 복사  (0) 2022.10.23
클래스의 복사  (0) 2022.10.22
virtual 소멸자  (0) 2022.10.22