[디딤돌 C++] 5. 함수 중복 정의 (FUNCTION OVERLOADING)

학생) C++에서는 같은 이름의 함수를 중복 정의할 수 있죠? 전문가) 그래 함수 중복 정의할 수 있어. Function Overloading이라 부르지. 입력 매개변수 리스트가 다르면 가능하단다. 반환 형식만 다르면 안 된단다.

C언어에서는 같은 이름을 갖는 함수를 정의할 수가 없죠. 하지만 C++언어에서는 같은 이름을 갖는 함수를 정의할 수 있어요. 이와 같은 문법을 함수 중복 정의 (Function Overloading)라고 불러요.

C++에서는 개발자가 정의한 코드를 컴파일 과정에서도 전개합니다. 함수 중복 정의가 대표적인 컴파일 과정에 전개하는 문법이예요. C++컴파일러는 개발자가 정의한 함수 명을 입력 매개 변수 리스트에 따라 유일한 이름의 함수 명으로 결정하는 함수 코드화(부호화) 과정이 있어요. 이러한 컴파일 전개가 있어서 같은 이름의 함수를 정할 수 있어요.

예를 들어 두 개의 정수 중에 최대값을 찾는 함수 명이 GetMax라고 정의했을 때 두 개의 문자 중에 최대값을 찾는 함수 명도 GetMax로 정할 수 있어요.

그리고 호출하는 곳에서 GetMax(2,3); 처럼 호출하면 두 개의 정수를 입력 인자로 받는 함수를 호출하고 GetMax(‘a’,’b’); 처럼 호출하면 두 개의 문자를 입력 인자로 받는 함수를 호출해 줍니다.

▷ 실행 결과

 

물론 아무 조건없이 함수 중복 정의가 가능한 것은 아니예요. 최소한 입력 매개 변수 리스트가 달라야 함수 중복 정의를 할 수 있어요. 반환 형식만 다르게 함수를 중복 정의할 수 없어요.

반환 형식만 다르면 함수 중복정의할 수 없어요.

다음은 반환 형식만 달라서 함수 중복 정의를 하지 못하는 코드예요.

 

그리고 컴파일러가 호출하는 곳에서 어느 함수를 호출한 것인지 판단할 수 없을 수 있으니 주의해서 사용하세요. 만약 long 형식의 입력 매개 변수 두 개를 받는 함수와 short 형식의 입력 매개 변수 두 개를 받는 함수를 중복 정의하였을 때 int 형식을 인자로 전달하면 컴파일러는 어느 함수를 호출하는지 판단할 수 없어요.

C++ 컴파일러는 이럴 때 컴파일 오류 메시지로 “호출이 모호합니다.”라는 메시지를 출력합니다.

컴파일러가 호출하는 곳에서 어느 함수를 호출하는 것인지 판별할 수 있어야 합니다.

 

다음은 함수 중복 정의는 가능하지만 호출하는 곳에서 모호하게 호출한 코드입니다. 이 코드는 컴파일 오류가 발생합니다.


[C++ 무료 동영상 강의] 5. 함수 중복 정의 (Function Overloading)