안녕하세요? 공대남입니다. 오늘은 함수 오버로딩과 매개변수 디폴트값에 대해서 살펴보겠습니다.

오버로딩과 매개변수 디폴트 값은 C언어에서는 동작하지 않는 기능입니다.

둘 다 함수에 관한 기능이고 그렇게 어렵지 않습니다. 그럼 자세히 알아보도록 하겠습니다.

차례

1. 함수 오버로딩 (Function Overloading)

2. 매개변수의 디폴트 값

1. 함수 오버로딩

C언어에서는 함수 이름이 같으면 컴파일 오류가 생깁니다. 그 이유는 간단합니다.

C언어에서 함수를 호출할 때 함수 이름으로 그 함수를 찾습니다. 그런데 함수 이름이 같은것이

두개 이상 있다면 컴파일 오류가 생깁니다. 하지만 C++에서는 함수 이름이 같아도

컴파일 오류가 생기지 않습니다. 그 이유가 뭘까요?

다음 예시와 함께 알아보겠습니다.

MyFunc 이라는 이름이 같은 함수 3가지를 정의합니다.

그런데 여기서 매개변수가 다를 다는 것이 보이시나요?

함수의 내용은 "MyFunc(void) called" 와 같이 어떤 매개변수를 가진 MyFunc이 호출 되었다고 출력합니다.

그런 다음 int main 에서 함수를 하나씩 호출 합니다. 각 매개변수 자료형에 맞게 인수를 입력합니다.

그러면 다음과 같이 컴파일 오류가 나지않고 프롬프트창에 출력됩니다.

즉, 함수 이름이 같아도 매개변수의 선언형태가 다르면 함수를 구분하여 호출 가능 한다는 것 입니다.

여기서 중요한 포인트는

C언어함수의 이름으로만 함수를 찾고 호출한다.

C++ 함수의 이름 매개변수(자료형, 개수)를 고려하여 호출한다.

그렇기 때문에 이름이 같아도 컴파일 오류가 나지 않습니다.


2. 매개변수의 디폴트 값

'디폴트 값'이란 '기본적으로 설정되어 있는 값'을 의미합니다.

예상해보자면, 매개변수의 기본 값이 설정되어 있다는 것 입니다.

다음 예시로 자세히 알아보겠습니다.

함수 Addnum (두 매개변수의 합을 반환하는 함수) 의 매개변수의 디폴트값을 5, 10으로 지정했습니다.

이 말은 인수가 전달되지 않는다면 num1 과 num2의 값을 5, 10으로 지정한다는 의미입니다.

int main에서 인수가 없을 때, 하나만 전달했을 때, 모두 전달했을 때를 출력하도록 되어있습니다.

컴파일을 완료시키면 다음과 같이 나옵니다.

첫번째 AddNum() 인수가 하나도 전달 되지 않았을 때는 매개변수의 디폴트값이 더해져 5+10의 값이 출력됩니다.

그 다음 인수가 하나가 전달되면 전달된 인수 1과 num2의 디폴트값 10이 더해집니다.

여기서 인수는 매개변수의 왼쪽부터 채워집니다. 즉, 하나가 전달되면

num1과 num2 중 왼쪽에 있는 num1부터 채워집니다.

마지막으로 인수가 모두 전달되면 전달된 두 인수의 합이 출력됩니다.


-

지금까지 C언어와 차이점인 오버로딩과 매개변수 디폴트값에 대하여 알아보았습니다.

유익한 정보였기를 바랍니다. 다음번에는 좀 더 유용한 정보와 글로 찾아오겠습니다.

감사합니다!

+ Recent posts