함수 오버로딩
- 함수의 이름은 같지만 함수의 parameter가 다른(parameter의 타입이 다른)함수
- C++ 컴파일러의 함수 오버로딩 과정(규칙)
- 1단계
- 자신과 타입이 정확히 일치하는 함수를 찾는다.
- 2단계
- 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해서 일치하는 함수를 찾아본다.
char, unsigned char, short
→ int
unsigned short
-> int
or unsigned int
float
→ double
enum
→ int
- 3단계
- 2단계와 같이 변환해도 일치하는 것이 없다면 아래의 좀 더 포괄적인 형변환을 통해 일치하는 함수를 찾는다.
- 임의의 숫자(numeric)타입은 다른 숫자 타입으로 변환된다. (예를 들어
float
→ int
)
- enum도 임의의 숫자 타입으로 변환된다. (예를 들어
enum
→ double
)
0
은 포인터 타입이나 숫자 타입으로 변환된 0
은 포인터 타입이나 숫자 타입으로 변환된다.
- 포인터는
void
포인터로 변환된다.
- 4단계
- 유저 정의된 타입 변환으로 일치하는 것을 찾는다.
- 만약 컴파일러가 위 과정을 진행하고도 일치하는 함수를 찾을 수 없거나 같은 단계에서 두 개 이상이 일치하는 경우에 모호하다(ambiguous)라고 판단해서 오류를 발생시킨다.