본문 바로가기
Object Oriented Programming(C++)/열혈 C++ 프로그래밍

C++ | 01-2 함수 오버로딩(Function Overloading)

by continue96 2021. 7. 22.

 

1. 함수 오버로딩(Function Overloading)

1.1 함수 오버로딩의 이해

 C언어는 동일한 이름의 함수가 두 개 이상 정의되는 것을 허용하지 않는다. 그러나 C++는 매개 변수의 선언 형태가 다르면 동일한 이름의 함수를 정의하는 것을 허용한다. 이것은 전달되는 인자를 통해 호출하고자 하는 함수를 구분할 수 있기 때문인데, 이러한 형태의 함수 정의를 함수 오버로딩(Function Overloading)이라고 한다. 같은 이름의 함수를 정의하기 위해서는 다음과 같은 형식을 따르면 된다.

 

functionType funtionName(variableTypeA variableName);
functionType funtionName(variableTypeB variableName);
functionType funtionName(variableTypeA variableName, variableTypeB variableName);

 그렇다면 C언어가 함수 오버로딩을 허용하지 않는 이유는 무엇일까? 이것은 호출할 함수를 찾는 방법이 C언어와 C++가 서로 다르기 때문이다. C++는 호출할 함수를 찾을 때 함수의 이름과 매개 변수의 선언이라는 두 가지 정보를 활용한다. 즉, 함수의 이름이 같아도 매개 변수의 선언을 통해 함수를 구분할 수 있다. 그러나 C언어는 호출할 함수를 찾을 때 오직 함수의 이름만을 정보로 활용하기 때문에 함수의 이름이 같으면 함수를 구분할 수가 없다. 따라서 C언어는 문법적으로 함수 오버로딩을 허용하지 않는다.

 

[한줄 요약] 함수 오버로딩이란?
동일한 이름의 함수를 여러 개 정의하는 것을 말한다.

 

1.2 함수 오버로딩의 조건

 함수의 오버로딩이 가능하려면 매개 변수의 선언이 달라야 한다. 즉, 매개 변수의 자료형이 서로 다르거나 또는 매개 변수의 개수가 달라야 한다. 예를 들어, 다음 함수들은 오버로딩할 수 있다.

 

int function (char c) {...}
int function (int n) {...}			// 1행의 function 함수와 매개 변수의 형식이 다르다.
int function (int n, int n2) {...}	// 2행의 function 함수와 매개 변수의 개수가 다르다.
void function (char c) {...}		// 컴파일 오류! 반환형은 함수 오버로딩의 조건이 아니다.

 1행과 2행의 function 함수는 매개 변수의 타입이 각각 char와 int로 서로 다르기 때문에 첫 번째 함수 오버로딩 조건이 성립한다. 따라서 전달되는 인자의 형식을 통해 호출할 함수를 구분할 수 있고 함수 오버로딩이 가능하다. 2행과 3행의 function 함수는 매개 변수의 개수가 다르기 때문에 두 번째 함수 오버로딩 조건을 성립하고, 전달되는 인자의 개수를 통해 호출할 함수를 구분할 수 있어 함수 오버로딩이 가능하다. 그러나 4행의 function 함수는 1행의 function 함수와 반환형이 다를 뿐, 반환형은 호출할 함수를 구분하는 기준이 될 수 없다. 따라서 함수 오버로딩의 조건을 만족시키지 못했으므로 컴파일 오류로 이어진다.

 

FunctionOverloading.cpp
#include <iostream>

void Function(void);
void Function(char c);
void Function(int a, int b);

int main(void) {
	Function();
	Function('A');
	Function(10, 20);
	return 0;
}

void Function(void) {
	std::cout << "Function(void)가 호출되었습니다." << std::endl;
}

void Function(char c) {
	std::cout << "Function(char c)가 호출되었습니다." << std::endl;
}

void Function(int a, int b) {
	std::cout << "Function(int a, int b)가 호출되었습니다." << std::endl;
}

 

FunctionOverloading.cpp 실행 결과
Function(void)가 호출되었습니다.
Function(char c)가 호출되었습니다.
Function(int a, int b)가 호출되었습니다.

 

[한줄 요약] 함수 오버로딩의 조건
1. 매개 변수의 자료형이 다르다.
2. 매개 변수의 개수가 다르다.
(3. const 선언을 한다. 이것은 나중에 다루도록 한다.)

2. 함수 오버로딩 문제 풀이

 

열혈 C++ 프로그래밍 | 문제 01-2 | 함수 오버로딩

문제 1 다음 main 함수에서 필요로 하는 swap 함수를 오버로딩해서 구현해보자. int main(void) {  int num1 = 20, num2 = 30;  swap(&num1, &num2);  std::cout << num1 << ' ' << num2 << std::endl;  ch..

continue96.tistory.com

 

댓글