함수 오버로딩(Function overloading)은 이름이 같은 함수지만, 다른 매개 변수를 가지고 있다면 사용이 가능한 C++의 기능이다.
C언어에서는 함수의 이름으로만 호출을 하지만, C++에서는 함수의 이름과 매개변수의 선언을 보고 호출하기 때문에 같은 이름으로 함수를 정의해도 매개 변수만 다르게하면 사용이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | include <iostream> using namespace std; int MyFunc(int num) { num++; return num; } int MyFunc(int a, int b) { return a+b; } int main(void) { MyFunc(20); MyFunc(30, 40); return 0; } | cs |
MyFunc(20)과 MyFunc(30, 40)은 같은 함수이지만 매개 변수가 각각 다르기 때문에 오류가 나지않고 제대로 실행이 된다.
함수 오버로딩이 가능하려면 자료형 또는 매개변수의 수가 달라야지만 사용이 가능하다.
int MyFunc(char c) {...}
int MyFunc(int n) {...}
자료형이 각자 다르기 때문에 함수 오버로딩이 가능하다.
int MyFunc(int n) {...}
int MyFunc(int n1, int n2) {...}
매개변수의 갯수가 다르기 때문에 함수 오버로딩이 가능하다.
void MyFunc(int n) {...}
int MyFunc(int n) {...}
두 함수는 반환형이 다르다. 함수 오버로딩의 조건은 자료형 또는 매개변수이기 때문에 두개가 해당되지않아 오류가 발생한다.
문제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 다음 main 함수에서 필요로 하는 swap 함수로 오버로딩을 구현해보자. 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; } [실행의 예] 30 20 Z A 5.555 1.111 | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> using namespace std; void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } void swap(char* a, char* b) { char temp; temp = *a; *a = *b; *b = temp; } void swap(double* a, double* b) { double temp; temp = *a; *a = *b; *b = temp; } int main(void) { int num1 = 20, num2 = 30; swap(&num1, &num2); cout << num1 << ' ' << num2 << endl; char ch1 = 'A', ch2 = 'Z'; swap(&ch1, &ch2); cout << ch1 << ' ' << ch2 << endl; double dbl1 = 1.111, dbl2 = 5.555; swap(&dbl1, &dbl2); cout << dbl1 << ' ' << dbl2 << endl; return 0; } | cs |

'코딩 > C++' 카테고리의 다른 글
| 05. 자료형 bool (1) | 2022.07.12 |
|---|---|
| 04. 이름공간(namespace) (1) | 2022.07.08 |
| 03. 인라인 함수 (2) | 2022.06.30 |
| 02. 매개변수의 디폴트 값 (3) | 2022.06.22 |
| 00. C++ 입출력 (0) | 2022.06.15 |