C++ 형변환
(1) static_cast
값 <=>
(2) reinterpret_cast -> 사용처 확인
값 <=> 주소 혹은 참조
참조 : 포인터나 레퍼런스
(3) dynamic_cast
- 부모와 자식관계에 있어서 추상화(virtual)가 성립했을때 캐스팅을 해주는 문법이다.
- 형변환을 하는 근간이 바로 가상함수 테이블을 기반으로 형변환을 하기 때문이다.
- 이걸 쓰면 좋은점이 상속받은 클래스인지 아닌지를 알수가 있다.
- 업캐스팅 -> 좋은 형변환
-> 자식 클래스의 객체는 언제든 부모 클래스의 참조형(포인터 형)으로 형변환이 될 수 있다.
-> 다형성 부모로서 자신을 상속받는 어느 자식으로든 형변환 가능 (ex) 몬스터가 될수 있고 플레이어가 될 수 있다.)
-> 업 캐스팅 - virtual 필요 없음

- 다운캐스팅
부모클래스의 참조형(포인터)에서 자식클래스의 참조형(포인터)으로 변환하는 것이다.
-> 사용 할때
충돌한 Actor (최상위 클래스) 값을 얻고 Actor를 상속받는 자식 클래스로 형변환 (다운 캐스트)
dynamic_cast -> 안전한 다운캐스팅 방법 (추천)
-> 다운 캐스팅 일 경우 가상함수 테이블 기반으로 형변환 (virtual 필수) -> 안할 시 코드적 에러
- 추가 설명
-> 부모 객체 자체를 자식 참조형으로 형변환 X
-> 부모의 참조형을 자식 참조형으로 형변환 O
- 다운 캐스팅 건강하지 못한 캐스팅류?
- 강제 형변환
다운 캐스팅 -> virtual 이 필요 없음 주소를 받아 형변환 -> 건강하지 않음

(4) const_cast
const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거해주는데 사용합니다.
int main()
{
const int a = 110;
int* b = const_cast<int*>(&a);
*b = 200;
const int* text = &a;
cout << *text;
}
a=110 -> text(a)=200 으로 변경
사용 안함 이유?
굳이 상수로 정한 값을 왜 중간에 값을 바꾸는데 이럴거면 처음부터 상수로 지정 안했다.
'C++ 개념 정리' 카테고리의 다른 글
| 9. 스마트 포인터 (0) | 2026.01.11 |
|---|---|
| 8. Enum Vs Enum Class (0) | 2026.01.04 |
| 6. 생성자, 소멸자 (0) | 2026.01.03 |
| 5. 연산자 (0) | 2026.01.03 |
| 4. 메모리 (0) | 2026.01.01 |