같은편
홍익대 게임소프트웨어전공의 프로그래밍 단련 공간
같은편
깃허브 주소
https://github.com/madongchan
GitHub 아이콘
  • 분류 전체보기 (85)
    • 게임 프로그래밍 패턴 (2)
    • C# 프로그래밍 (26)
    • C++ 프로그래밍 (32)
      • 함수 (8)
      • 클래스 (22)
    • 알고리즘 공부 (2)
      • codingame 사이트 문제 (11)
    • 유니티엔진 - 게임 공부 (3)
    • 언리얼엔진 - 게임 공부 (4)
    • 쓸모 있을 수 있는 팁 (2)
    • 일상이야기 (3)

최근 댓글

태그

  • 언리얼
  • 객체
  • DFS
  • 비동기
  • 스레드
  • 언리얼엔진
  • 문제 풀이
  • 복사 생성자
  • 최단 경로
  • task
  • 언리얼엔진4
  • queue
  • 탐욕 알고리즘
  • 예외 처리
  • 클래스
  • C#
  • 알고리즘
  • 함수
  • c++
  • 람다식

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
같은편

홍익대 게임소프트웨어전공의 프로그래밍 단련 공간

형 변환
C++ 프로그래밍/클래스

형 변환

2022. 8. 25. 15:35

어떤 값을 다른 자료형으로 변수에 저장할 필요가 있을 때 형 변환을 사용합니다.

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<>

이 변환 연산자는 컴파일 시간에 논리적으로 가능한 변환인지를 검사하여 가능한 변환이 아니면 오류를 발생시킵니다.

  1. 기본 자료형 사이의 변환은 혀용
  2. 상속 관계에 있는 클래스들의 포인터 변환 허용- 대신 하향 형 변환은 잠재적인 문제가 있으므로 조심히 사용
  3. 다른 변환은 허용 않음

위 세가지만 알아도 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
    같은편
    같은편
    책을 통해 이때까지 블로그나 유튜브에서 얻었던 지식의 파편들을 정립하고 합쳐 단단한 발판으로 만들기 위한 블로그

    티스토리툴바