함수의 오버로딩
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
'C++ 기초 1' 카테고리의 다른 글
[C++] 1-12 함수의 지역 변수 / 전역 변수 설명 및 예제 (49) | 2023.11.21 |
---|---|
[C++] 1-11 함수의 디폴트 매개변수 (47) | 2023.11.20 |
[C++] 1-9 인라인 함수 장점과 단점 (48) | 2023.11.16 |
[C++] 1-8 함수의 참조 전달 (참조자 매개변수) (47) | 2023.11.15 |
[C++] 1-7 참조자(Reference) 사용 이유 및 포인터 차이 (38) | 2023.11.14 |