[C++이론] C++에서의 함수오버로딩
위 포스팅 내용은 윤성우의 열혈 C++ 책을 참고하였습니다.
C에서는 함수의 이름이 같다면 컴파일 오류가 발생합니다.
하지만 C++에서는 함수의 이름이 같더라도 컴파일 오류가 일어나지 않는데요
Q.왜 함수의 이름이 같은데 컴파일 오류가 나지 않을까요?

위 예시를 보면 void 형 함수 Naong 을 세 개나 선언했는데 컴파일 오류가 발생하지 않는 것을 확인할 수 있습니다.
C++에서 함수오버로딩이 허용되는 이유는 C++의 함수 호출방식 때문인데요.
C++에서는 함수를 호출할 때 (1)함수의 이름 과 (2)매개변수 로 구분하기 때문에
함수의 이름이 같더라도
1. 매개변수의 자료형이 다르다
2. 매개변수의 개수가 다르다
다음의 경우에 해당되면 다른 함수로 인식하는 덕분에 오버로딩이 가능합니다.
따라서
Melon 이라는 이름의 함수를 만들 때
void Melon(char n1){}
void Melon (int n1){}
void Melon(int n1, int n2){}
void Melon(char n1, char n2){}
위와 같이 만들어도 에러가 나지 않는 것을 확인할 수 있습니다.
하지만 주의해야 할 점은
void Melon(char n1){} int Melon(char n1){}
void Melon (int n1){}
void Melon(int n1, int n2){}
void Melon(char n1, char n2){}
다른 것은 다 동일한데 반환형을 다른 자료형으로 바꿨다고 해서 다른 함수로 인식되는 것이 아니라는 것입니다.
C++은 엄연히 두 가지 '함수의 이름'과 '매개변수' 로만 판단한다는 것을 다시 한 번 새겨봅시다~