[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 속성 등을 고려하여 적절한 오버로드된 함수를 결정합니다. 하나의 오버로딩된 함수를 호출하는 것이 명확하지 않을 때, 컴파일러는 최적의 매치를 찾기 위해 다음의 규칙을 따릅니다.

  1. 정확한 일치 (Exact match)
    • 매개변수의 데이터 형식이 완벽히 일치하는 오버로딩된 함수를 선택합니다.
  2. 표준 자료형 변환 (Standard type conversion)
    • 매개변수의 데이터 형식을 표준 자료형 변환을 통해 일치시킬 수 있는 오버로딩된 함수를 선택합니다.
  3. 사용자 정의 변환 (User-defined conversion)
    • 매개변수의 데이터 형식을 사용자가 정의한 변환 연산자 또는 생성자를 통해 일치시킬 수 있는 오버로딩된 함수를 선택합니다.
  4. 가변인자 (Variadic arguments)
    • 함수 호출 시 가변 인자를 사용할 경우, 해당 가변인자에 가장 가까운 매개변수를 갖는 오버로딩된 함수를 선택합니다.

결론

함수 오버로딩은 C++에서 매우 강력한 기능 중 하나입니다. 함수 오버로딩 결정 규칙을 이해하고 활용하는 것은 효율적이고 견고한 코드를 작성하는 데 도움이 될 것입니다.

참고 자료:
https://docs.microsoft.com/en-us/cpp/cpp/function-overloading?view=msvc-160
https://www.geeksforgeeks.org/function-overloading-cpp/