[C++] 오버로딩(Overloading)

728x90
반응형

오버로딩(Overloading) 은 같은 이름의 함수를 여러개 정의할 수 있는 기능이다. 이는 함수의 이름은 같지만 매개변수의 타입이나 개수에 따라 다르게 정의될 수 있음을 의미한다. 함수 오버로딩을 사용하면 가독성을 높이고 함수의 이름을 직관적으로 사용할 수 있다.

기본 개념

  • 함수 오버로딩은 함수의 이름을 동일하게 유지하면서도 서로 다른 매개변수 목록을 갖는 여러 버전의 함수를 정의할 수 있다. C++컴파일러는 함수 호출 시 제공된 인수에 기반하여 적절한 오버로딩 된 함수를 선택해 컴파일 한다.

함수 오버로딩의 예

#include <iostream>

// 매개변수가 없는 함수
void print() {
    std::cout << "No arguments" << std::endl;
}

// 정수형 매개변수를 가진 함수
void print(int i) {
    std::cout << "Integer: " << i << std::endl;
}

// 실수형 매개변수를 가진 함수
void print(double d) {
    std::cout << "Double: " << d << std::endl;
}

// 두 개의 매개변수를 가진 함수
void print(int i, double d) {
    std::cout << "Integer: " << i << " and Double: " << d << std::endl;
}

int main() {
    print();          // No arguments
    print(10);        // Integer: 10
    print(3.14);      // Double: 3.14
    print(10, 3.14);  // Integer: 10 and Double: 3.14

    return 0;
}

print라는 이름의 함수가 네 가지 버전으로 정의되어 있다. 각각의 함수는 다른 매개변수 목록을 가지고 있고 이로 인해 print()를 호출할 때마다 전달되는 인수에 따라 적절한 함수가 호출된다.

오버로딩 규칙

  1. 매개변수의 개수
    • 함수가 매개변수의 개수에 따라 오버로딩될 수 있다.
      void func(int a); // 1개의 매개변수 
      void func(int a, int b); // 2개의 매개변수
  2. 매개변수의 타입
    • 함수가 매개변수의 타입에 따라 오버로딩될 수 있다.
      void func(int a); // int 타입 매개변수 
      void func(double a); // double 타입 매개변수
  3. 매개변수의 순서
    • 매개변수의 순서가 다르면 오버로딩할 수 있다.
      void func(int a, double b); // int, double 순서
      void func(double a, int b); // double, int 순서

주의사항

  1. 리턴 타입만으로는 오버로딩을 구분할 수 없다.
    • 같은 매개변수 목록을 가진 두 함수가 서로 다른 리턴 타입을 가질 경우 컴파일 오류가 발생한다.
  2. 디폴트 인수(Defulat Arguments)
    • 디폴트 인수가 있는 함수는 오버로딩과 혼동될 수 있으므로, 매개변수의 개수나 타입이 다르더라도 주의 해야한다.
728x90
반응형