[Modern C++] 5.3. 캐스팅, 디폴트 인자, 반복자

윤정민·2023년 7월 3일
0

C++

목록 보기
17/46

1. C++ 스타일의 캐스팅

기존 C언어에서의 캐스팅은 크게 컴파일러에서 알아서 캐스팅하는 암시적 캐스팅과 우리가 직접 캐스팅하라고 지정하는 명시적 캐스팅이 있었다. 하지만 명시적 캐스팅의 경우 말이 안되는 캐스팅의 경우에도 컴파일러가 오류를 발생시키지 않는다는 문제가 있다. 뿐만 아니라 가독성도 떨어진다는 단점이 존재한다.

따라서 C++에서는 4가지 종류의 캐스팅을 제공한다.

1.1. static_cast

일반적인 언어적 차원에서 지원하는 타입 변환

1.2. const_cast

객체의 상수성(const)를 없애는 타입 변환.
쉽게 말해 const intint로 바뀌는 변환.

1.3. dynamic_cast

파생 클래스 사이에서의 다운 캐스팅

1.4. reinterpret_cast

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

캐스팅 방법

(원하는 캐스팅 종류)<바꾸려는 타입>(바꾸려는 대상)

2. 디폴트 인자

C++에서 (C언어에서는 지원되지 않음) 함수가 호출될 때 입력 인자에 값이 넘어오지 않는다면 미리 정해진 값을 함수 내부에서 가지도록 할 수 있다. 이렇게 기본값을 가지는 함수의 인자를 기본값 인자(default parameter)라고 하며 함수의 선언부에서 명시해 주어야 한다.

void func(int ia=0); // 함수의 선언에 ia의 기본값을 10으로 지정

int func(int ia) { //함수 정의. ia는 기본값 10을 가진다.
    return ia+10;
}
func(); // 변수 ia는 0값을 자동으로 갖는다.
func(10); // 변수 ia에 10값을 넘겨준다.
  • 디폴트 인자는 오른쪽 끝부터 지정해주어야 하며 중간에 띄워져 지정해주면 오류가 발생함을 주의
void sum(int ia, int ib=5, int ic, int id=10);// 에러 발생
  • 논리적으로 중복되는 함수들을 조심하여 선언할 것
void func(int ia, string strA=“Hi”);
void func(int ia); // 허용되지 않는 함수 중복

3. 반복자(iterator)

반복자는 배열 내 원소를 가리키는 포인터라고 생각하면 된다. 주로 배열을 순회하기 위해서 자주 사용되며 인자처럼 사용해 원하는 원소에만 접근할 수도 있다.

  • iterator를 활용한 배열 순회
for(std::vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
    std::cout << *iter << std::endl;
}
profile
그냥 하자

0개의 댓글