본문 바로가기

컴퓨터/C, C++

함수 오버로딩[C++]

C언어에서 함수를 선언할 때 같은 이름의 함수를 선언하는 것은 허용되지 않았지만 C++에서는 함수 오버로딩이라는 개념을 통해 같은 이름의 함수를 선언할 수 있는데 조건이 있다. 매개 변수가 같은지도 확인하는 것이다.

int Func(int a, int b)

int Func(int c)

위 코드에서 Func 이라는 두 개의 함수가 선언되었는데 매개변수를 보면 int a, int b가 선언된 Func이 있고 int c가 선언된 함수가 있는데 함수 이름이 같지만 매개변수가 다르면 함수를 선언하고 사용할 수 있다. 간단히 정리하면 C언어에서는 선언된 함수의 이름을 같은지 비교를 하는데 C++같은 경우에는 선언된 함수의 이름매개변수의 선언이 같은지 비교를 한다는 것이다.

그런데 함수 오버로딩이 아닌 경우도 있다.

double Func(int a)

int Func(int a)

위 코드를 보면 두 함수의 반환형이 다르다. 하지만 선언된 함수의 이름과 매개 변수의 선언만을 비교하기에 함수의 반환형을 비교하지 않는다. 그렇기때문에 위 코드는 함수 오버로딩이 불가능하다. 아래 코드는 함수 오버로딩이 가능한 예시이다.

#include <iostream>

using namespace std;

void Func(int a)
{
	cout << "int n = " << a << endl;
}

void Func(int b, int c)
{
	cout << "int b = " << b << ", int c = " << c << endl;
}

void Func(char d)
{
	cout << "char d = " << d << endl;
}

void Func(void)
{
	cout << "void" << endl;
}

int main(void)
{
	Func(1);
	Func(1, 2);
	Func('a');
	Func();
	return 0;
}

(실행)