06
15

함수 오버로딩(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(3040);
    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;
    *= *b;
    *= temp;
}
 
void swap(char* a, char* b)
{
    char temp;
    temp = *a;
    *= *b;
    *= temp;
}
 
void swap(double* a, double* b)
{
    double temp;
    temp = *a;
    *= *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
COMMENT