모두의 코드: 씹어먹는 C++ - <5 - 3. 연산자 오버로딩 프로젝트 - N 차원 배열>

YP J·2022년 6월 17일
0

모두의코드 C++

목록 보기
5/11
  • C++ 스타일의 캐스팅 (static_cast 등등)

  • 디폴트 인자 (default argument)

  • N 차원 배열의 제작

  • 반복자(iterator)

C++스타일의 캐스팅

기존C언어 에선 ,캐스팅은 크게 2가지 방법으로 발생.

  1. 그냥 컴파일러에서 알아서 캐스팅 하는 암시적(implicit) 캐스팅과,
  2. 우리가 직접 캐스팅 하라고 지정하는 명시적 (explicit)캐스팅
  • 1번의(암시적) 경우 int 와 double 변수와의 덧셈을 수행할때,
    int 형 변수가 자동으로 double변수로 캐스팅 되는 것과 같은 것을 말하고

  • 2번의(명시적) void * 타입의 주소를 특정 구조체 포인터 타입의 주소로 바꾼다던지 등의 캐스팅이 있습니다.

이때 명시적 캐스팅은 다음과 같이 수행 된다.

ptr = (Something *)other_ptr;
int_variable = (int)float_variable;

괄호 안에 원하는 타입을 넣고 변환 수행한것,

But 문제점 발생

  • 말도 안되는 캐스팅에 대해서 컴파일러가 오류를 발생시키지 않는다.

C++에선 다음과 같은 4가지 캐스팅을 제공한다.

  • static_cast :
    우리가 흔히 생각하는, 언어적 차원에서 지원하는 일반적인 타입변환

  • const_cast:
    객체의 상수성(const) 를 없애는 타입변환, 쉽게 말해 const intint 로 바뀐다

  • dynamic_cast:
    파생 클래스 사이에서의 다운캐스팅(->정확한 의미는 나중에~)

  • reinterpret_cast:
    위험을 감수하고 하는 캐스팅으로 서로 관련이 없는 포인터들 사이의 캐스팅 등.

이러한 캐스팅 사용방법
(원하는 캐스팅 종류)<바꾸려는 타입>(무엇을 바꿀 것인가?)

static_cast<int>(float_variable);

== in C
(int)(float_variable)

static_cast로 float 타입의 float_variable이라는 변수를 int타입의 변수로 타입 변환.

N차원 배열 만들기

동적으로 2차원 배열을 구현, arr[x1][x2]

int **arr;
arr = new int*[x1];
for (int i=0; i<x1; i++)
{
	arr[i] = new int[x2];
}

일단 Pass~ 상속 먼저

profile
be pro

0개의 댓글