본문 바로가기
스터디/C++

[ C++ ] 함수 오버로딩 ( Function Overloading )

by 알 수 없는 사용자 2019. 9. 5.

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++ 함수 오버로딩