C 언어에서는 다음과 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.
두 함수의 이름이 같이 때문에 컴파일 오류가 발생한다.
int Func(int num)
{
num++;
return num;
}
int Func(int a, int b)
{
return a+b;
}
하지만 C++에서는 이러한 함수 정의 형태인 함수 오버 로딩 ( Function Overloading )을 지원해주고 있어서
함수 호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.
int Func(int num)
{
num++;
return num;
}
int Func(int a, int b)
{
return a+b;
}
int main(void)
{
Func(20); // Func(int num) 함수의 호출
Func(30, 40); // Func(int a, int b) 함수의 호출
return 0;
}
여기서 C언어에서 함수 오버 로딩을 허용하지 않는 이유가 뭘까?
C++에서는 호출할 함수를 찾을 때 '함수의 이름', '매개변수의 선언' 두 가지 정보를 활용하여 함수를 찾는다.
하지만 C에서는 함수의 이름만으로 호출 대상을 찾기 때문에 함수의 오버 로딩이 불가능하며, 문법적으로 허용하지도 않는다.
함수의 오버 로딩이 가능하려면 매개변수의 선언이 달라야 한다.
int Func(char c) { ... }
int Func(int n) { ... }
마찬가지로 매개변수의 개수가 달라도 구분이 가능하다.
int Func(int n) { ... }
int Func(int n1, int n2) { ... }
즉, "매개변수의 자료형 또는 개수가 다르다"라는 조건을 만족해야 한다.
그래서 다음과 같은 형태는 잘못된 함수 오버 로딩의 예이다.
void Fun(int n) { ... }
int Fun(int n) { ... }
두 함수의 반환형이 다르다는 특징이 있다. 하지만 반환형을 호출되는 함수를 구분하는 기준이 될 수 없기 때문에,
위와 같은 형태의 함수 정의는 컴파일 오류가 된다.
'스터디 > C++' 카테고리의 다른 글
[ C++ ] Call-by-value , Call-by-reference (0) | 2019.09.05 |
---|---|
[ C++ ] const ( 상수 )의 활용 (0) | 2019.09.05 |
[ C++ ] 인라인(inline) 함수 (0) | 2019.09.05 |
[ C++ ] 선행처리기 / 전처리기 ( Preprocess ) (0) | 2019.09.05 |
[ C++ ] 매개변수의 디폴트 값 ( Default Value ) (0) | 2019.09.05 |