기존 C언어에서의 캐스팅은 크게 컴파일러에서 알아서 캐스팅하는 암시적 캐스팅과 우리가 직접 캐스팅하라고 지정하는 명시적 캐스팅이 있었다. 하지만 명시적 캐스팅의 경우 말이 안되는 캐스팅의 경우에도 컴파일러가 오류를 발생시키지 않는다는 문제가 있다. 뿐만 아니라 가독성도 떨어진다는 단점이 존재한다.
따라서 C++에서는 4가지 종류의 캐스팅을 제공한다.
일반적인 언어적 차원에서 지원하는 타입 변환
객체의 상수성(const)를 없애는 타입 변환.
쉽게 말해 const int
가 int
로 바뀌는 변환.
파생 클래스 사이에서의 다운 캐스팅
위험을 감수하고 하는 캐스팅으로 서로 관련이 없는 포인터들 사이의 캐스팅 등
(원하는 캐스팅 종류)<바꾸려는 타입>(바꾸려는 대상)
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); // 허용되지 않는 함수 중복
반복자는 배열 내 원소를 가리키는 포인터라고 생각하면 된다. 주로 배열을 순회하기 위해서 자주 사용되며 인자처럼 사용해 원하는 원소에만 접근할 수도 있다.
for(std::vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
std::cout << *iter << std::endl;
}