목차
- Function Overloading 정의
- Function Overloading 예제
Function Overloading 정의
[정의]
오버로딩 (= 동일 함수명으로 여러 함수 정의) 가능 경우.
① 매개변수 개수가 다른 경우.
② 매개변수 타입이 다른 경우.
PS. 단지, 매개변수명만 다른 경우엔 메서드 오버로딩 불가.
cf. Java Overloading과 유사.
[예제]
int myFunction(int x)
// 개수 같아도 자료형 다른 경우, 오버로딩 가능 O.
float myFunction(float x)
// 자료형 같지만 개수 다른 경우, 오버로딩 가능 O.
int myFunction(int x, int y)
// 자료형과 개수 모두 다른 경우, 오버로딩 가능 O.
double myFunction(double x, double y)
// 단지, 변수명만 다른 경우, 오버로딩 가능 X
int myFunction(int y) // 에러 유발.
Function Overloading 예제
[오버로딩 사용 X 경우] - int형과 double형 함수를 각각 정의.
#include <iostream>
using namespace std;
int plusInt(int x, int y) {
return x + y;
}
double plusDouble(double x, double y) {
return x + y;
}
int main() {
int a = plusInt(3, 4);
double b = plusDouble(2.41, 3.14);
cout << "int: " << a << "\n";
cout << "double: " << b;
return 0;
}
결과값:
int: 7
double: 5.55
[오버로딩 사용 O 경우 ★] - int형과 double형 함수를 오버로딩.
※ 권장 방식.
#include <iostream>
using namespace std;
int plusNums(int x, int y) {
return x + y;
}
double plusNums(double x, double y) {
return x + y;
}
int main() {
int a = plusNums(3, 4);
double b = plusNums(2.41, 3.14);
cout << "int: " << a << "\n";
cout << "double: " << b;
return 0;
}
결과값:
int: 7
double: 5.55
PS.
주의: 함수명을 plus로 할 경우, 아래와 같은 에러 발생.
error: reference to ‘plus’ is ambiguous
이 문제를 해결하려면, 아래 2가지 방법 중 하나로 해결.
① 함수명을 다르게 변경해 선언. (예) plus → plunNums
② 함수 호출 시, plus 앞에 :: 추가. (※ 아래 예제 참고.)
#include <iostream>
using namespace std; // 함수명이 plus일 경우, 에러 야기.
int plus(int x, int y) {
return x + y;
}
double plus(double x, double y) {
return x + y;
}
int main() {
int a = ::plus(3, 4);
double b = ::plus(2.41, 3.14);
cout << "int: " << a << "\n";
cout << "double: " << b;
return 0;
}
결과값:
int: 7
double: 5.55
https://stackoverflow.com/questions/31593548