오늘 배워볼 내용은 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만 주는 이유가 있습니다.
이 디폴트 값은 오른쪽부터 줘야 합니다. 그 이유는 함수에 전달되는 인자는 왼쪽부터 값을 주기 때문에 맨 오른쪽 인자에 디폴트값이 없어버리면
아예 값이 없어서 잘못된 값이 나오기 때문입니다.
이 점 유의하면서 디폴트 값을 선언해야 합니다.
'알음알음-IT > 개발_기초_코딩_C++' 카테고리의 다른 글
C++ 공부하기 - 6.참조자와 함수 (0) | 2020.02.04 |
---|---|
C++ 공부하기 - 5.참조자(Reference) (0) | 2020.02.04 |
C++ 공부하기 - 4.이름공간(namespace) (0) | 2020.02.04 |
C++ 공부하기 - 3.인라인 함수 (0) | 2020.02.04 |
C++ 공부하기 - 1.C++의 입출력 (0) | 2020.02.04 |