Programming Language/C++

[C++이론] C++에서의 함수오버로딩

나옹코딩 2020. 7. 17. 19:32
위 포스팅 내용은 윤성우의 열혈 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++은 엄연히 두 가지 '함수의 이름'과 '매개변수' 로만 판단한다는 것을 다시 한 번 새겨봅시다~