rueki
함수 오버로딩(Function Overloading) 본문
728x90
반응형
함수 오버로딩이란 동일한 이름을 가진 함수를 여러개 만들어서 사용하는 것을 말한다.
int add(int x, int y)
{
return x + y;
}
double add(double x, double y)
{
return x + y;
}
위의 예제에서 보면 두 가지 함수가 있다. 첫 번째는 int 형 값을 덧셈하는 함수, 두 번째는 double 형 함수를 덧셈하는 함수이다. 오버로딩의 정의를 위에서 설명했듯이, 위의 예제의 두 함수 이름이 같은 것을 알 수가 있다.
add(1, 2);
add(2.0, 4.0);
메인 부분에 이렇게 두 가지를 선언했다고 할 때, 어떻게 판단해서 함수를 적용할까?
답은 함수에 선언된 파라메터를 보고 판단하게 된다. 타입이 제일 유사하거나 혹은 맞는 파라메터의 함수를 사용하며, 이는 컴파일 할 때 결정된다. 중요한 것은 return 타입이 다른 것만으로는 오버로딩이 되지 않는다.
// 같은 타입으로
typedef int my_int;
void print(int x){}
void print(my_int x) {}
위의 예제는 얼핏 보면 함수의 파라메터 타입이 다르게 보이나 typedef로 선언한 것을 넣어서 안에 결국에는 같은 파라메터이기때문에 사용이 가능하다.
void print(char* value) {}
void print(int value) {}
print(0);
print('a');
이번 예제는 주의해야될 점이 있다. 첫 번째 함수의 인자에 포인터 변수가 선언되어서 메인부분의 print('a')에서 에러가 뜬다. 이는 포인터로 인해 int 형으로 취급되며 오버로딩을 사용할 때 데이터 타입에 주의를 해야한다.
컴파일러가 매칭이 되지 않는 함수와 인자의 경우에는 억지로 맞추는 경우도 있으며, 에러가 날 가능성이 있다.
제일 좋은 것은 모든 변수에 대해 타입을 선언해주는 것이 깔끔하다고 한다.
728x90
반응형
'C,C++ 기초 및 자료구조' 카테고리의 다른 글
함수 포인터 (0) | 2020.07.26 |
---|---|
매개변수의 기본값 (0) | 2020.07.21 |
다양한 타입의 return (0) | 2020.07.15 |
Call by Value, Call by Reference (0) | 2020.07.12 |
재귀 알고리즘 기초 (recursive call) (0) | 2020.06.07 |
Comments