프로그래밍 언어/C & C++ 정리

c++ 함수의 특질

뽀또치즈맛 2023. 1. 7. 14:50

함수의 오버로딩 (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