C++ 개념 정리

7. C++ 형변환

CE : 하랑 2026. 1. 3. 21:52

 

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