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;
}
'컴퓨터 > C, C++' 카테고리의 다른 글
매개변수의 디폴트 값(default value) [C++] (0) | 2020.12.10 |
---|---|
합병 정렬(merge sort) C언어 (0) | 2020.06.03 |
C언어 printf() 함수와 puts() 함수 (0) | 2019.12.21 |