[c++] 함수 오버로딩과 오버로딩 결정을 하는 규칙
C++에서 함수 오버로딩은 하나 이상의 함수가 같은 이름을 가지고 있지만 서로 다른 매개변수 리스트를 갖는 것을 의미합니다. C++ 컴파일러는 호출된 함수가 어떤 오버로드를 참조해야 하는지 결정하기 위해 오버로딩 결정 규칙을 따릅니다.
함수 오버로딩의 예제 코드
아래는 간단한 함수 오버로딩의 예제 코드입니다.
#include <iostream>
using namespace std;
void print(int i) {
cout << "정수 출력: " << i << endl;
}
void print(double f) {
cout << "실수 출력: " << f << endl;
}
int main() {
int num1 = 5;
double num2 = 5.5;
print(num1); // 첫 번째 print 함수 호출
print(num2); // 두 번째 print 함수 호출
return 0;
}
오버로딩 결정 규칙
C++ 컴파일러는 함수 호출 시 매개변수의 수, 데이터 형식, const 속성 등을 고려하여 적절한 오버로드된 함수를 결정합니다. 하나의 오버로딩된 함수를 호출하는 것이 명확하지 않을 때, 컴파일러는 최적의 매치를 찾기 위해 다음의 규칙을 따릅니다.
- 정확한 일치 (Exact match)
- 매개변수의 데이터 형식이 완벽히 일치하는 오버로딩된 함수를 선택합니다.
- 표준 자료형 변환 (Standard type conversion)
- 매개변수의 데이터 형식을 표준 자료형 변환을 통해 일치시킬 수 있는 오버로딩된 함수를 선택합니다.
- 사용자 정의 변환 (User-defined conversion)
- 매개변수의 데이터 형식을 사용자가 정의한 변환 연산자 또는 생성자를 통해 일치시킬 수 있는 오버로딩된 함수를 선택합니다.
- 가변인자 (Variadic arguments)
- 함수 호출 시 가변 인자를 사용할 경우, 해당 가변인자에 가장 가까운 매개변수를 갖는 오버로딩된 함수를 선택합니다.
결론
함수 오버로딩은 C++에서 매우 강력한 기능 중 하나입니다. 함수 오버로딩 결정 규칙을 이해하고 활용하는 것은 효율적이고 견고한 코드를 작성하는 데 도움이 될 것입니다.
참고 자료:
https://docs.microsoft.com/en-us/cpp/cpp/function-overloading?view=msvc-160
https://www.geeksforgeeks.org/function-overloading-cpp/