rueki

함수 오버로딩(Function Overloading) 본문

C,C++ 기초 및 자료구조

함수 오버로딩(Function Overloading)

륵기 2020. 7. 18. 23:16
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