알음알음-IT/개발_기초_코딩_C++

C++ 공부하기 - 2.함수의 오버로딩와 매개변수의 디폴트 값

구구닥스 2020. 2. 4. 14:26

오늘 배워볼 내용은 C++의 오버로딩과 매개변수의 디폴트 값에 대해서 공부하겠습니다.

우선 C언어를 공부하면서는 오버로딩이라는 것을 배우지 않습니다. 이유는 C언어에서는 오버로딩이 불가능하기 때문입니다 

이 오버로딩은 동일한 이름의 함수가 정의되는것을 뜻합니다. 다만 매개변수가 다르지요. 

C언어에서 오버로딩이 불가능한 이유는 우선 C++과 C언어는 호출할 함수를 찾을 때 방법이 다르기 때문입니다.

C언어는 함수의 이름으로

C++은 함수의 이름과 매개변수의 선언 이 두가지를 보고 찾기 때문에 오버로딩이 가능한 이유입니다.

그럼 한번 테스트를 해보겠습니다.

#include <iostream>

 

int Add(int a,int b);

int Add(int a,int b, int c);

 

int main(void)

{

int a,b,c;

int sum1,sum2;

std::cout<<"숫자를 입력하시오 : ";

std::cin>>a>>b>>c;

 

sum1 = Add(a,b,c);

std::cout<<sum1<<std::endl;

 

std::cout<<"숫자를 입력하시오 : ";

std::cin>>a>>b;

 

sum2 = Add(a,b);

std::cout<<sum2<<std::endl;

 

return 0;

}

int Add(int a,int b)

{

return a+b;

}

int Add(int a,int b, int c)

{

return a+b+c;

}

 

보시는 것처럼 Add라는 함수가 동일한 이름으로 하나는 두개의 매개변수 하나는 세개의 매개변수값을 선언했는데 이러한 차이로 C++함수를 구분하여 호출할 수 있습니다.

결과값은

정확히 함수를 구분해서 나왔네요

즉 오버로딩하려는 함수의 매개변수의 자료형 또는 갯수가 달라야 오버로딩이 가능합니다.

 

그 다음은 매개변수의 디폴트 값입니다.

방금 배운 오버로딩에서 함수의 매개변수의 갯수에 따라 구분하는 것을 보았는데 살펴볼 디폴트 값이란 즉 값을 설정하지 않으면 미리 설정한 값으로 

작동할 수 있습니다.

#include <iostream>

 

int Add(int a=2,int b=3, int c=4);

 

int main(void)

{

int a,b,c;

int sum1;

std::cout<<"숫자를 입력하시오 : ";

std::cin>>a>>b>>c;

sum1 = Add(a,b,c);

std::cout<<sum1<<std::endl;

 

std::cout<<"숫자를 입력하시오 : ";

std::cin>>a>>b;

sum1 = Add(a,b);

std::cout<<sum1<<std::endl;

 

std::cout<<"숫자를 입력하시오 : ";

std::cin>>a;

sum1 = Add(a);

std::cout<<sum1<<std::endl;

 

 

 

return 0;

}

int Add(int a,int b, int c)

{

return a+b+c;

}

보시면 매개변수의 디폴트 값을 선언할 때 같이 선언했습니다.

a=2, b=3, c=4

제가 0값을 a에 주면 나머지 변수는 디폴트 값으로 3+4 =7

제가 0값을 a,b,에 주면 나머지 변수는 디폴트 값으로 4가 나와야겠죠?

결과값을 보실까요?

 

보시는 것처럶 디폴트 값이 적용되어 나와있죠?

단 여기서 주의해야할 사항 몇가지가 있습니다.

이 디폴트값은 부분적으로 선언할 수 있습니다. 위에 코드라면 a,b는 디폴트값을 주지 않고 c만 줄 수 있습니다.

여기서 c만 주는 이유가 있습니다.

이 디폴트 값은 오른쪽부터 줘야 합니다. 그 이유는 함수에 전달되는 인자는 왼쪽부터 값을 주기 때문에 맨 오른쪽 인자에 디폴트값이 없어버리면

아예 값이 없어서 잘못된 값이 나오기 때문입니다.

이 점 유의하면서 디폴트 값을 선언해야 합니다.