반응형
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 |