어떤 값을 다른 자료형으로 변수에 저장할 필요가 있을 때 형 변환을 사용합니다.
2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-상속에서의 형 변환
다형성-상속에서의 형 변환
1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이루어지는 문장입니다. int
onesside-world.tistory.com
위의 블로그에서도 상향 형변환과 하향 형변환을 이용해 부모 객체가 자식 객체가 되었습니다.
이런 형 변환을 더 안전하게 사용하기 위해
C++은 네가지의 형 변환 연산자를 제공합니다.
형 변환 연산자 | 설명 |
reinterpret_cast<> | C언어 형변환과 유사함, 무조건적인 형 변환 |
const_cast<> | 상수형 포인터에서 const를 제거함 |
static_cast<> | 컴파일시 형 변환 |
dynamic_cast<> | 실행시간의 형 변환 |
1. reinterpret_cast<>
이 변환 연산자는 C언어에서와 같이 포인터를 포함해 어떤 자료형도 다른 자료형으로 변환할 수 있습니다.
int iValue = 10;
int* pi = &iValue;
float* pf = reinterpret_cast<float*>pi;
pi = reinterpret_cast<int*> iValue;
iValue = reinterpret_cast<int> pf;
2. const_cast<>
이 변환 연산자는 보통 const 속성을 제거하기 위해 사용됩니다.
void sub1(const char* s) {}
void sub2(char* s) {}
위 두 함수들을 main()에서 호출할때 만약 인수가 char*형이면 자동으로 두 함수 모두 호출이 가능하지만,
const char*형이면 sub2만 호출이 가능합니다.
왜 그런지는 아래 링크로 들어가시면 좋을거같습니다.
2022.08.25 - [C++ 프로그래밍/클래스] - const 중요
const 중요
const를 이용해 쉽게 상수를 만들어 사용할 수 있습니다. 근데 솔직히 const를 신경 쓰지 않고 코드를 작성해도 프로그램에 오류나 문제는 전혀 없습니다. 그렇다면 왜 쓰는 것일까요? (´・ω・`)?
onesside-world.tistory.com
ㅣ
const char* s1 = "hello";
char s2[10] = "world !";
sub1(s1); // 가능: 형이 정확히 일치
sub1(s2); // 가능: 자동 변환 char* -> const char*
sub2(s1); // 불가능: const char* -> char* 변환 불가
sub1(s2); // 가능 형이 정확히 일치
이때 const_cast<>을 사용하면 cons를 제거할 수 있습니다.
sub2(const_cast<char*>s1); // 가능 const 속성 제거
3. static_cast<>
이 변환 연산자는 컴파일 시간에 논리적으로 가능한 변환인지를 검사하여 가능한 변환이 아니면 오류를 발생시킵니다.
- 기본 자료형 사이의 변환은 혀용
- 상속 관계에 있는 클래스들의 포인터 변환 허용- 대신 하향 형 변환은 잠재적인 문제가 있으므로 조심히 사용
- 다른 변환은 허용 않음
위 세가지만 알아도 static_cast<> 를 쓰는 데 문제는 없을겁니다.
4. dynamic_cast<>
이 변환 연산자도 주로 상속 곤계에 있는 클래스 포인터를 변환하는데 사용됩니다.
static_cast<>와 비슷하지만, 하향 형 변환을 무조건 혀용하는 것이 아니라
실행시간에 가능한지를 검사하여 허용합니다.
'C++ 프로그래밍 > 클래스' 카테고리의 다른 글
윈도우에서 제공하는 표준 템플릿 라이브러리 라이브러리(STL) (1) | 2022.09.03 |
---|---|
일반화 프로그래밍 (1) | 2022.09.03 |
const 중요 (2) | 2022.08.25 |
예외 처리 방법들 (1) | 2022.08.22 |
예외 처리란? (1) | 2022.08.22 |