C++ 함수 오버로딩: 실전 가이드
C++ 함수 오버로딩
C++에서 같은 이름인데 시그니처가 다른 여러 함수를 정의하는 오버로딩 기법을 실전 예제로 익혀보세요.
C++에서는 **매개변수 목록이 타입, 개수, 순서 중 하나라도 다르면** 같은 이름의 함수를 여러 개 정의할 수 있습니다. 이를 오버로드된 함수(Overloaded Functions)라 합니다.
예:
// 같은 이름, 다른 인수
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
위 네 선언 모두 유효한 오버로드 세트입니다. **반환 타입은 오버로드 해소에 영향을 주지 않습니다.** 오직 매개변수 목록만 중요합니다. 예:
// 컴파일 에러: 동일한 시그니처
int test(int a) { }
double test(int b){ }
두 함수 모두 이름, 타입, 개수가 같아서 컴파일러가 중복으로 간주해 거부합니다.
예제 1: 매개변수 타입 다르게 오버로딩
// int와 float의 절댓값 계산 오버로딩
#include <iostream>
using namespace std;
// float 버전
float absolute(float var){
return (var < 0.0f) ? -var : var;
}
// int 버전
int absolute(int var){
return (var < 0) ? -var : var;
}
int main(){
cout << "Absolute value of -5 = " << absolute(-5) << endl;
cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
return 0;
}
실행 결과
Absolute value of -5 = 5
Absolute value of 5.5 = 5.5
이 프로그램은 absolute()를 오버로딩했으며, 컴파일러는 인수 타입에 따라 적절한 버전을 선택합니다.
예제 2: 매개변수 개수 다르게 오버로딩
#include <iostream>
using namespace std;
// 두 매개변수 버전
void display(int var1, double var2){
cout << "Integer: " << var1;
cout << " & Double: " << var2 << endl;
}
// 단일 double 매개변수
void display(double var){
cout << "Double: " << var << endl;
}
// 단일 int 매개변수
void display(int var){
cout << "Integer: " << var << endl;
}
int main(){
int a = 5;
double b = 5.5;
display(a);
display(b);
display(a, b);
return 0;
}
실행 결과
Integer: 5
Double: 5.5
Integer: 5 & Double: 5.5
display() 호출이 인수의 개수와 타입에 따라 올바른 오버로드로 해석됩니다.
참고: sqrt() 같은 표준 라이브러리 함수는 int, float, double 등 다양한 타입으로 중복 오버로딩되어 개발자에게 유연성을 제공합니다.