승쨩개발공부

[C++] 캐스팅 (static_cast, dynamic_cast, const_cast, reinterpret_cast) 본문

C++

[C++] 캐스팅 (static_cast, dynamic_cast, const_cast, reinterpret_cast)

SeungHyune 2021. 12. 6. 14:37

캐스팅?

-> 형 변환

 

캐스팅 사용 방법

-> 캐스팅<자료형>(데이터);

 

자료형

-> 어떤 자료형으로 형을 바꿀지 명시해준다.

 

데이터

-> 변환할 데이터

-> 어떤 데이터를 바꿀지 명시해준다.

 

 

1. static_cast

-> 정적 캐스팅, 논리적인 캐스팅

-> 형 변환 시점이 컴파일 시점이기 떄문에 static 이라는 명칭이 붙는다.

-> C스타일의 캐스팅과 비슷한 역활을 한다.

 

객체 포인터의 형 변환

Static_cast의 주의사항

1. C스타일 캐스팅은 어떤 형이든 상관 없이 모두 변환이 가능하다.

하지만 이런 경우엔 위험성이 발생할 수 있다.

 

2. 상속 관계 유무를 따지기 때문에 논리적인 캐스팅이라고 한다.

 

하지만 상속 관계만 따질 뿐 부모와 자식의 관계는 따지지 않기 떄문에,

잘못 사용하게 되면 또 다른 위험성이 생길 수가 있다.

 

 

 

 

 

 

 

2. dynamic_cast

-> 안전한 캐스팅

캐스팅에 성공하면 주소 값을 반환.

캐스팅에 실패하면 nullptr를 반환.

-> 캐스팅 성공 유무에 따라 함수의 호출을 결정할 수 있다.

 

 

dynamic cast 주의점

1. 객체 포인터간의 형 변환만 가능하다.

2. virtual 키워드가 단 하나라도 존재하는 상속 관계에서만 가능하다.

 

 

조건문을 통한 dynamic cast 사용법

->다음과 같이 dynamic_cast를 통해서 CPlayer 또는 CMonster로 형 변환에 성공하였는지 확인한 후,

-> 성공을 하였으면, 해당 객체 안에 있는 함수를 호출할 수 있다.

 
 
 
 

 

3. const_cast

-> const의 성향을 제거하는 캐스팅

상수의 성향을 제거하여 일반 변수로 만드는 것.

단, 원본이 상수일 경우에는 작동하지 않는다.

 

 

 

 

4. reinterpret_cast

-> 모든 포인터간의 형 변환을 허용하는 캐스팅.

잘 사용하지 않는다.

 

'C++' 카테고리의 다른 글

[C++] 인라인(inline)  (0) 2021.12.06
[C++] 바인딩  (0) 2021.12.06
[C++] 가상 함수(virtual), 가상 소멸자, 순수 가상 함수  (0) 2021.12.03
[C++] 오버라이딩  (0) 2021.12.03
[C++] 객체 포인터  (0) 2021.12.03