c언어는 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.
//아래와 같은 코드는 컴파일 오류 발생
int MyFunc(int num)
{
num++;
return num;
}
int MyFunc(int a, int b)
{
return a+b;
}
int main(void)
{
MyFunc(20);
MyFunc(30, 40);
return 0;
}왜냐면 c언어는 호출한 함수를 찾을 때 함수의 이름만을 사용하기 때문이다.
c++언어는 호출한 함수를 찾을 때 함수의 이름과 매개변수의 선언, 총 두 가지 정보를 이용하기 때문에 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다. 이러한 형태의 함수정의를 가리켜 **함수 오버로딩(Function Overloading)**이라고 한다.
주의할 점으로, c++ 언어에서 함수의 반환형은 함수를 식별하는 기준이 될 수 없기 떄문에 아래와 같이 함수 오버로딩 할 수 없다.
void MyFunc(int n) {/*...*/}
int MyFunc(int n) {/*...*/}
- const의 선언유무도 함수 오버로딩의 조건에 해당이 된다.
참고자료