씨쁠쁠06

오젼·2022년 6월 19일
0

[cpp]

목록 보기
7/9

type casting 연습하는 과제

ex00

  • 형변환 클래스 만드는 과제
  • 먼저 입력 받은 값의 타입을 찾고, 입력값을 char, int, float, double형으로 각각 캐스팅한 값을 출력한다.

char literals

  • ex) ’c’, ’a’, ...
  • 출력가능한 범위에 있으면 해당 문자 출력
  • non displayable이면 Non displayable 출력
  • 애초에 char 타입 범위를 넘어서는 값이면 impossible 출력

int literals

  • ex) 0, -42, 42...

float literals

  • ex) 0.0f, -4.2f, 4.2f...
  • nan은 nanf로
  • inf는 inff로
  • -inf는 -inff로

double literals

  • ex) 0.0, -4.2, 4.2...
  • nan은 nan으로
  • inf는 inf로
  • -inf는 -inf로

c 스타일과 c++ 스타일 캐스팅의 차이

  • https://zbomoon.tistory.com/22
  • c의 명시적 캐스팅은 컴파일 시에 오류를 파악하지 않기 때문에 런타임 에러 발생 가능.
  • c++의 명시적 캐스팅은 컴파일 시에 오류를 잡기 때문에 더 안전

c++ 스타일의 캐스팅

static_cast<type>(variable)

  • 논리적 형변환.
  • 예를 들어 int형 1과 double형 1의 바이너리 값은 다를테지만 static_cast를 쓰면 1이라는 값이 유지되도록 캐스팅을 해준다.

ex01

reinterpret_cast

  • reinterpret_cast는 임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자이다.
    출처: https://blockdmask.tistory.com/242 [개발자 지망생:티스토리]
  • reinterpret_cast 연산자는 전혀 상관이 없는 자료형으로의 형 변환에 사용이 된다.
  • 이렇게 reinterpret_cast 연사자는 포인터를 대상으로 하는, 그리고 포인터와 관련이 있는 모든 유형의 형 변환을 허용한다.
  • 데이터의 값이 아닌 바이너리 값 자체를 복사해줌!

uintptr_t

  • 포인터에 대한 비트연산을 할 때 쓰일 수 있다고 한다.

ex02

dynamic cast

  • Base class 포인터를 Derived class 포인터로 변환하는 기능
  • 포인터와 포인터간, 레퍼런스와 레퍼런스간의 변환만 가능하다.
  • 안전한 타입캐스팅. 단 virtual 키워드가 하나라도 존재하는 상속 관계에서만 가능하다.

c++ cast to derived class

0개의 댓글