본문 바로가기
Embedded System/소프트웨어 (C,C++)

[C++] 함수 오버로딩 (Function Overloading)

by MachineJW 2024. 6. 20.

1. 헤더파일 선언문의 확장자

# include <iostream>

int main (void) {
	int num = 20 ;
	std :: cout << "hello world!" << std :: endl;
	
	return 0;
}

 

과거 입력 및 출력에 관한 일을 하기 위해서 .h 의 확장자를 붙여 헤더파일을 선언하였다.

그러나 다음 2가지 이유로 헤더파일의 포함에는 확장자를 생략하기로 한다.

현재 C++ 컴파일러는 <iostream.h>를 지원하지 않는 추세로 접어들었다.

  • 과거의 표준 라이브러리와 새로운 표준 라이브러리의 구분
  • 새로운 표준 라이브러리를 사용하는 형태로 소스코드를 쉽게 변경할 수 있도록

2. 함수 오버로딩 (Function Overlording)

int MyFunc(int num) {
	num++;
	return num;
}

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

C언어에서는 위의 코드와 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.

C++ 에서는 함수 호출 시 전달되는 인자를 통해서 호출하고자하는 함수의 구분이 가능하다.
이러한 형태의 함수 정의를 함수 오버로딩이라고 한다. 

/*호출 시*/
int main (void) {
	MyFunc(30, 40);
}

C 컴파일러 : MyFunc 함수명을 가진 함수를 찾아 호출

C++ 컴파일러 : 두개의 int 형 정수를 인자로 받을 수 있는 MyFunc라는 이름의 함수를 호출.

/*Overloading 1*/
int MyFunc (int num) { }
int MyFunc (char c) { }

/*Overloading 2*/
int MyFunc (int n) { }
int MyFunc (int n1, int n2) { }

/*Overloading 3 (잘못된 예시)*/
void MyFunc (int n) { }
int MyFunc (int n) { }

함수 오버로딩의 조건은 매개변수의 자료형 또는 개수가 달라야 한다!

잘못된 예시를 보면 반환형이 다르지만 함수 호출 시, 호출되는 함수를 구분하는 기준이 될 수 없다.

3. 매개변수 디폴트 값 (Default Value)

// 함수의 매개변수를 다음의 형태로 선언하는 것이 가능하다. 
int MyFunc(int num = 7) {
	num++;
	return num;
}

int num = 7 의 매개변수 선언의 의미는 함수 호출 시 인자를 전달하지 않으면 디폴트 값 7을 전달하라는 의미이다.

디폴트 값은 함수의 원형 선언에만 위치시켜야한다.

또한 일부분만 디폴트 값을 지정할 수 도 있다. (오른쪽 매개변수의 디폴트 값을 차례대로 지정)