C언어 기반 C++ 2
- 형 변환 연산1
- 형 변환 연산2
- 형 변환 연산3
형 변환 연산1
C++ 형 변환
다운 캐스팅 등 문법적으로 에러가 있더라도 컴파일 에러를 일으키지 않고 형 변환 연산 처리
C++의 형 변환 : 4가지의 종류로 분할하여 사용
-> 각 종류 별 케이스에 일치하지 않으면 컴파일 에러 발생, 문법적 오류 발견 가능
1. static_cast 2. const_cast 3. dynamic_cast 4. reinterpret_cast
dynamic_cast(안전성 보장) <-> static_cast(안전성 미 보장)
형 변환 연산2
dynamic_cast
포인터 또는 참조자를 T형으로 변환하되, 안전한 형 변환만을 허용
ex) B클래스의 기초 클래스 A클래스일 때, B클래스의 포인터를 A클래스의 포인터로 변환하는 것은 안전
: B클래스의 포인터로 가리키는 것은 A클래스의 포인터로도 항상 가리킬 수 있기 때문
<-> A클래스의 포인터로 가리키는 것을 B클래스의 포인터형으로 변환하는 것은 불안전
: 유도클래스의 포인터를 기초 클래스 포인터형으로 변환하는 것은 안전 : dynamic_cast
+ 상속 관계에 있는 포인터 간 형 변환
static_cast
프로그래머가 일정 부분 책임을 감수하고
static_cast
프로그래머가 일정 부분 책임을 감수하고 넓은 범위에서 형 변환을 허용
-> 기초 클래스의 포인터를 유도 클래스의 포인터형으로 변환하는 것을 무조건 허용
+ 기본 자료형 간 형 변환
+ static_cast는 const를 제거 할 수 없음 (C의 형 변환은 const 제거 가능)
const_cast
const 성향을 제거하는 형 변환
const char* name = "john";
ShowString(const_cast<char*>(name));
-> const char*형을 char*형으로 캐스팅
reinterpret_cast
상관없는 자료형으로의 형 변환
-> 서로 아무 관련이 없고 상속 관계에 있는 것도 아닌 클래스 간의 형 변환
-> 형 변환의 결과는 예측 할 수 없음
형 변환 연산3
polymorphic 클래스
멤버 중 하나 이상이 가상으로 선언되어 있는 클래스
- 기본적으로 dynamic_cast에서 유도 클래스에서 기초 클래스로의 형 변환은 불허
-> 기초 클래스가 폴리몰픽 클래스라면 dynamic_cast도 유도 클래스에서 기초 클래스로의
포인터 및 참조형 변환은 허용
bad cast
참조형을 대상으로 dynamic_cast하는 경우 bad_cast 발생 가능성 : 예외 처리가 필요
'Study > Passionate C++ Programming' 카테고리의 다른 글
[열혈 C++ 프로그래밍] 윤성우의 열혈 C++ 프로그래밍 내용 정리 (0) | 2024.02.10 |
---|---|
[열혈 C++ 프로그래밍] (15) 예외처리 (1) | 2024.02.10 |
[열혈 C++ 프로그래밍](14) 템플릿 2 (0) | 2024.02.10 |
[열혈 C++ 프로그래밍] (13) 템플릿 1 (1) | 2024.02.10 |
[열혈 C++ 프로그래밍] (12) String 클래스 디자인 (0) | 2024.02.10 |