본문 바로가기

C++ 기초 1

[C++] 1-10 함수의 오버로딩 설명 및 조건

함수의 오버로딩

   C++언어에서는 동일한 함수명을 갖는 여러 함수가 존재하더라도 함수를 정의할 수 있다. 인수의 개수와 인수의 데이터형을 검사해서 함수를 호출하기 때문에 같은 이름이더라도 동일한 이름의 함수를 정의할 수 있다. 이때 주의할 점은, 오버로드된 함수들은 반환하는 값의 데이터형이 같아야 한다. 그 이유는 반환하는 데이터로 오버로드되는 함수들을 구분하는 것이 아니라 각 함수가 사용하는 인수의 개수와 인수의 데이터형으로 구분하기 때문이다.

int sub(int a, int b);
char sub(int a, int b);

위와 같이 안수의 개수와 데이터형은 동일한데 반환되는 데이터형이 다르면은 오류가 발생된다.  

 
예제 1
#include <iostream>
using namespace std;
int add(int, int);			//함수의 원형 선언
int add(int, int, int);		//함수의 원형 선언

int main()
{
	int a, b, c;
	cout << "a, b, c? ";
	cin >> a >> b >> c;
	cout << "a+b=" << add(a, b) << endl;		//함수 호출
	cout << "a+b+c=" << add(a, b, c) << endl;	//함수 호출
	return 0;
}

int add(int a, int b)				//2개의 인수를 사용하는 함수
{
	return a + b;
}

int add(int a, int b, int c)		//3개의 인수를 사용하는 함수
{
	return a + b + c;
}
결과
a, b, c? 100 200 300 <Enter>
a+b=300
a+b+c=600
※ add라는 동일한 함수명을 갖는 두 개의 함수가 정의되어 있고 각 함수에서 사용하는 인수의 개수가 다르기 때문에 함수를 호출할 때 인수의 개수를 검사하여 해당 함수를 호출한다. 
예제 2
#include <iostream>
using namespace std;
int add(int, int);			//함수의 원형 선언
double add(double, double);		//함수의 원형 선언

int main()
{
	int a = 10, b = 100;
	double c = 1.25, d = 2.5;
	cout << a << "+" << b << "=" << add(a, b) << endl;		//함수 호출
	cout << c << "+" << d << "=" << add(c, d) << endl;		//함수 호출
	return 0;
}

int add(int a, int b)				//인수의 데이터형이 정수형
{
	return a + b;
}

double add(double c, double d)		//인수의 데이터형이 실수형
{
	return c + d;
}
결과
10+100=110
1.25+2.5=3.75
※ add라는 동일한 함수명을 갖는 두 개의 함수가 정의되어 있고 각 함수에서 사용하는 인수의 데이터형이 다르기 때문에 호출할 때 인수의 데이터형을 검사하여 해당 함수를 호출한다. 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13