[CPP] 오버로딩

1. 함수 오버로딩

함수 오버로딩(overloading)은 둘 이상의 함수 정의에서 동일한 함수 이름을 사용하는 것이다. 함수 이름이 동일하므로 이 함수를 호출하면 어느 함수 정의를 실행할지 선택해야 하는데 이 과정을 함수 오버로딩 해결(overloading resolution)이라 한다.

함수 오버로딩의 특징이 없다면 double average2(int x1, int x2)와 double average3(int x1, int x2, int x3)와 같이 평균을 계산하기 위해 사용하는 숫자의 수에 따라 average2나 average3로 프로그래머가 직접 이름을 다르게 지어야 한다. 어느 함수든지 평균을 계산하는 것은 동일하므로 직관적으로 이름을 동일하게 부여하는 것은 자연스러운 일이다. 따라서 average(int x1, int x2)와 average(int x1, int x2, int x3)로 프로그램을 작성하되 C++ 컴파일러가 인자의 수에 따라 실행할 함수를 선택한다.

함수 오버로딩 해결 과정은 대략 두 단계로 설명할 수 있다. 첫번째, 함수 호출에서 사용한 실 인자의 갯수와 타입이 정확히 일치하는 함수 정의를 가장 높은 우선순위로 선택한다. 둘째, 만일 정확히 일치하는 함수 정의가 없다면, 형 변환을 통해 일치하는 함수 정의를 찾는다.

이때, 형 변환의 예로 int를 double로, double을 int로 자동으로 바꾸는 것을 들 수 있다. 클래스 상속에 의한 형 변환도 가능하고, 클래스 생성자에 의한 형 변환도 포함된다.

이러한 과정으로 유일한 함수 정의를 찾을 수 있다면 이 함수를 호출하고, 전혀 못찾는다면 함수 정의가 없다는 컴파일 에러를 내고, 둘 이상의 함수 정의를 찾았다면 일치하는 함수가 여러 개이므로 하나만 일치하도록 프로그램을 다시 작성하라는 컴파일 에러를 준다.

2. C++ 디폴트 인자

 

Leave a Reply

Your email address will not be published. Required fields are marked *