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;
}