함수는 C언어에서 매우 중요한 위치를 차지한다!!!
그런데 이 함수 기능이 C++로 옮겨지면서 기능이 확장되었다.

이런식의 함수 선언은 씨에서는 두 이름이 같기에 오류가 발생한다.
그런데 위의 두 함수를 그저 인자를 통해서 구분하면 함수를 구분할 수 있지 않을까?
라는 생각이 든다.

이런 식으로 말이다.
c++에서는 실제로 이를 허용하고있다!!!
그리고 이러한 형태의 함수정의르르 가리켜 함수 오버로딩 이라고 한다.
그런데
C는 허용하지 않는데 왜 c++은 허용할까?
호출할 함수를 찾는 방법이 서로 다르기 때문이다.
c++ : "함수의 이름","매개변수의 선언"
"두 개의 int형 정수를 인자로 전달받을 수 있는 myFunc라는 함수를 찾아야겠군!"
하지만 C는
C : "함수의 이름"
"myFunc ! myFunc 어딨어!!! "
와 같이 이름을 통해서만 찾는다.
때문에 씨에서는 불가능하고 씨플플에서는 가능한것이다.
함수 오버로딩이 가능하기 위해서는
"매개변수의 자료형 또는 개수가 달라야한다"
하지만 반환형이 다르다고 해서는 오버로딩이 가능하지 않다!
그 이유는 위에서 오버로딩이 가능한 이유를 설명했듯, c++는 함수를 활용할때 매개변수,함수의 이름 만을 이용한다!!!!
그럼 간단한 함수 오버로딩 예제를 보자.
#include <iostream>
void MyFunc(void)
{
std::cout<<"MyFunc(void) called"<<std::endl;
}
void MyFunc(char c)
{
std::cout<<"MyFunc(char c) called"<<std::endl;
}
void MyFunc(int a,int b)
{
std::cout<<"void MyFunc(int a,int b) called"<<std::endl;
}
int main(void)
{
MyFunc();
MyFunc('A');
MyFunc(12,23);
return 0;
}

함수오버로딩은 이렇듯!!!
어려운 개념이 아니다!!