728x90

1. 함수 오버로딩 개념

함수의 기능은 동일한데 매개변수만 다른 경우! (리턴형의 차이는 해당되지 않음)

 

*함수 오버로딩이 제대로 작동하지 않고 에러 나는 경우

1) 함수의 리턴형만 다른 경우

2) 이상의 함수에 대응되는 경우

 

2. 코드

#include <iostream>
using namespace std;

int sum(int, int);
float sum(float, float);

int main() {
    //함수의 오버로딩 = 함수의 다형(다양한 형태를 지닌)
    //"여러 개의 함수를 같은 이름으로 연결한다"
    //구분 기준: 입력 매개변수의 형태
    const int a = 1;
    const int b = 2;
    const float c = 1.5;
    const float d = 2.3;
    cout <<sum(a,b)<<endl;
    cout <<sum(c,d)<<endl;

    return 0;
}

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

float sum(float c, float d) {
    return c+d;
}

3. 에러 슈팅

처음에는 main 함수를 이하와 같이 작성하였더니 에러가 발생하였다.

int main() {
    cout <<sum(1,2)<<endl; //ok
    cout <<sum(1.5, 2.3)<<endl; //에러 발생
    return 0;
}

위 코드를 이하와 같이 고쳤더니 해결되었다.

const int a = 1;
const int b = 2;
const float c = 1.5;
const float d = 2.3;
cout <<sum(a,b)<<endl;
cout <<sum(c,d)<<endl;

결국 함수 오버로딩의 핵심은 매개변수의 형태가 다른 것이다.

 

바뀐 코드에서는 const int와 const float 형태의 변수 a, b, c, d를 사용하여 함수 sum을 호출하고 있다.

이러한 형태로 함수 호출을 하면 컴파일러가 적절한 sum 함수를 선택할 수 있게 된다.

 

따라서 함수 오버로딩을 실행하기 전, 매개변수의 자료형을 미리 선언(int float 변수를 사용)해야 한다.

즉, 미리 변수에 값을 입력해두고, 해당 변수를 함수의 입력으로 사용하는 것이다.

 

원래 발생했던 에러의 이유는 매개변수의 형태가 충돌하고 있었기 때문이다.

728x90

+ Recent posts