승쨩개발공부
[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 |