함수의 오버로딩 (Function Overloading)
함수의 오버로딩이란?
c언어에서는 허용하지 않았던, 기능이다.
같은 이름이라고 하더라도 매개 변수의 자료형 또는 개수 혹은 함수의 자료형이 다르면
함수 생성이 가능하다.
함수의 디폴트 값 설정
<예 시 1>
int YourFunc (int num1, int num2, int num3) { . . . }
예시 1번과 같은 함수가 있다고 가정해 보자,
그럼 다음과 같이 일부분만 디폴트 값을 지정 할 수도 있고,
전부 디폴트 값을 지정할 수 있다.
<예 시 1 - 1 >
int YourFunc (int num1, int num2 = 1, int num3 = 3) { . . . }
<예 시 1 - 2>
int YourFunc (int num1 = 3, int num2 = 1, int num3 = 3) { . . . }
만약 일부분만 디폴트 값을 지정하면, 다음의 형태로도 함수의 호출이 가능하다.
YourFunc(10) // YourFunc (10, 5, 7)
YourFunc(10, 20) // YourFunc (10, 20, 7)
하지만, 다음과 같이 오른쪽 매개변수의 디폴트 값을 비우는 형태로는 디폴트 값을 지정할 수 없다.
<예 시 1 - 2 >
int YourFunc (int num1 = 3 , int num2 = 1, int num3) { . . . }
반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 한다.
즉, 다음의 함수정의는 모두 유효하다.
<예 시 2 - 1 >
int YourFunc (int num1, int num2, int num3 = 3) { . . . }
<예 시 2 - 1 >
int YourFunc (int num1, int num2 = 1, int num3 = 3) { . . . }
반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 한다.
즉, 다음의 함수정의는 모두 유효하다.
int YourFunc (int num1 , int num2 , int num3 = 30) { . . . }
int YourFunc (int num1 , int num2 = 5 , int num3 = 30) { . . . }
int YourFunc (int num1 = 10 , int num2 = 5 , int num3 = 30) { . . . }
이는
함수가 전달되는 인자가 왼쪽에서부터 오른쪽으로 채워지기 때문인데
정확히는 스택때문이다.
스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다.
그 접근 방법은 언제나 목록의 끝에서만 일어난다.
끝먼저내기 목록(Pushdown list)이라고도 한다.
함수의 시그내처는 그 함수의 매개변수 리스트이다.
시그내처를 다르게 하면 같은 이름의 두 함수를 정의할 수 있다.
이것을 함수 다형 혹은 함수 오버로딩이라 한다.
일반적으로 함수 오버로딩은
서로 다른 데이터형으로 본질적으로 같은 작업을 수행해야 할 때 많이 사용된다.
함수 템플릿은 함수 오버로딩 작업을 자동화하는 것이다.
일반형과 특정 알고리즘을 사용하여 함수를 정의하면,
컴파일러가 프로그램이 사용하는
특정 매개변수의 데이터형에 알맞은 함수 정의를 생성한다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
전처리 지시자 (0) | 2023.01.08 |
---|---|
동적 할당 함수 (0) | 2023.01.07 |
함수 (0) | 2023.01.06 |
포인터 (0) | 2023.01.04 |
버블 소트 Bubble Sort (0) | 2023.01.04 |