본문 바로가기
C++/윤성우 열혈 C++ 프로그래밍

01-2 함수 오버로딩

by 대소기 2021. 9. 26.

함수 오버로딩(Function Overloading)의 이해

  • C언어에서는 호출할 함수를 찾을 때 함수명 만으로 찾기 때문에 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.
  • 하지만, C++에서는 호출할 함수를 찾을 때 함수명과 매개변수의 형태까지 고려하기 때문에 매개변수 선언형태가 다르다면, 동일한 이름의 함수를 선언하는 것을 허용한다. 이를 함수 오버로딩이라고 한다.
  • 함수 오버로딩은 매개변수의 개수가 다르거나, 매개변수의 자료형이 다를 경우에 가능하다. 하지만, 함수 호출시 반환형까지 고려하지는 않기 때문에 반환형의 자료형을 통해 함수 오버로딩을 하는 것은 불가능하다.
# MyFunc의 매개변수의 선언형태가 다름. 오버로딩 가능
int MyFunc(int num)
{
    num++;
    return num;
}

int MyFunc(int a, int b)
{
    return a+b;
}

# MyFunc2의 반환형만 다름. 오버로딩 불가.
int MyFunc2(int num)
{
    num++;
    return num;
}

void MyFunc2(int num)
{
    num++;
    return num;
}

01-2 연습문제

  • 다음 main 함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자
#include <iostream>

void swap(int *ptr1, int *ptr2)
{
    int temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

void swap(char *ptr1, char *ptr2)
{
    char temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

void swap(double *ptr1, double *ptr2)
{
    double temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

int main(void)
{
    int num1=20, num2=30;
    swap(&num1, &num2);
    std::cout<<num1<<' '<<num2<<std::endl;

    char ch1='A', ch2='Z';
    swap(&ch1, &ch2);
    std::cout<<ch1<<' '<<ch2<<std::endl;

    double dbl1=1.111, dbl2=5.555;
    swap(&dbl1, &dbl2);
    std::cout<<dbl1<<' '<<dbl2<<std::endl;
    return 0;
}