C++에서는 함수의 매개변수에 디폴트 값 설정이 가능하다.
디폴트(default)란, 사전적의 의미론 체납, 채무 불이행 등등의 뜻이 있습니다.
프로그래밍 언어에서의 디폴트는 비슷하지만 조금 다른 의미를 가지고 있습니다.
필자가 생각하기엔 최초의 시작값이라고 이야기하고 싶습니다.
우선 디폴트값을 설정하는 법 부터 알아보죠.
C++에서의 디폴트값 선언
int Function(int num=10){
return num+1;
}
앞서 보던 매개변수와는 조금 다른 모습을 보이지요.
기존 매개변수는 다음과 같이 선언 했습니다.
int Function(int num){
return num;
}
위의 매개변수는 int num=10 그리고 기존의 방식은 int num 으로 선언되어 있지요.
이를 해석하자면 매개변수를 생성하자마자 초기화 한다고도 할 수 있겠네요.
하지만 다른 의미를 가집니다.
만약에 Function을 호출할 때 인자를 전달하지 않으면 num은 10의 값을 가지겠다.
즉, 다음과 같이 이해 할 수 있습니다.
Function(); //매개 인자없이 호출하여 num의 값은 10이 된다.
Function(5); //매개 인자가 정수 5를 전달하니 num의 값은 5가 된다.
이해가 되셨나요?
조금 더 이해를 할 수 있도록 심화된 예제 2가지를 작성 해보겠습니다.
#include <iostream>
int Function(int n = 10, int m = 20, int i = 30, int j = 40) {
return n + m + i + j;
}
int main(void)
{
std::cout << Function(5) << std::endl;
std::cout << Function(5, 10) << std::endl;
}
실행 결과
95
85
#include <iostream>
int Function(int n = 10, int m = 20, int i = 30, int j = 40) {
return n + m + i + j;
}
int main(void)
{
std::cout << Function(5) << std::endl;
std::cout << Function(5, 10) << std::endl;
std::cout << Function( , , , 5) << std::endl;
}
실행 결과
에러가 발생하여 실행되지 않음
왜 첫번째 예제는 실행이 되고 두번째 예제는 실행이 되지않을까요?
이유는 간단합니다.
우리는 매개변수가 있는 함수를 호출할 때 인자를 전달합니다.
하지만 그 매개변수가 여러개라면 좌측부터 인자값이 전달됩니다.
그렇기에 두번째 예제에서는 4개의 매개 변수 중 4번째의 매개 변수에만 인자를 전달하려고 하였기에 오류가 발생하는것입니다.
이로써 우리는 함수를 호출하며 인자를 전달할 때는 좌측부터 시작한다는것을 깨닫게 되었습니다.
그리고 C++에서는 함수의 원형을 별도로 선언할 수 있습니다.
이때 디폴트 값은 함수의 원형에만 선언하시면됩니다.
#include <iostream>
int Function(int num=10, int num2=20); // 함수의 원형
int main(void)
{
std::cout<<Function()<<std::endl;
return 0;
}
int Function(int num, int num2){
return num+num2;
}
위 예제와 같이 함수의 원형을 별도로 선언할 경우 원형에서만 디폴트값을 사용해주시면 됩니다.
그리고 우리는 여기서 또 한가지의 사실을 발견할 수 있습니다.
기존에는 디폴트 값을 사용하지 않고 매개변수 원형 그대로 사용했었는데 그렇다는것은 여러개의 매개변수가 있을 때 어떤 매개변수는 디폴트 값을 적용하고 어떤 매개변수는 적용하지 않아도 될까?
네 됩니다.
그것을 부분적 디폴트 선언이라고합니다.
몇가지 예를 들어보겠습니다.
int Function(int num, int num2 = 5, int num3 = 10)
int Function(int num, int num2, int num3 = 10)
하지만 여기서 유의 할 점이 있습니다.
앞서 말씀드린것처럼 우리가 알게된 사실이 있습니다.
함수는 매개인자를 전달받을때 왼쪽에서부터 오른쪽으로 채워진다는 사실이죠.
그렇기 때문에 우리가 부분적 디폴트 선언을 할 경우에 좌측부터 디폴트 선언을 하거나 중간 매개 변수만 디폴트 선언을 하지않는다거나 한다면 오류가 발생합니다.
이를 예제로 들어보겠습니다.
int Function(int n = 10 , int n2 = 15, int n3) // 잘못된 예
int Function(int n, int n2 = 10, int n3) // 잘못된 예
int Function(int n = 10 , int n2, int n3) // 잘못된 예
int Function(int n = 10 , int n2, int n3 = 15) // 잘못된 예
위 처럼 3개의 매개 변수들을 이용하여 잘못된 예의 경우의 수를 작성해보았습니다.
우리는 매개변수에 디폴트값을 설정해줄경우 우측부터 차례대로 작성해주어야합니다.
오타,개념오류 등에 대한 요청은 댓글 혹은
4538cgy@gmail.com로 말씀해주시면 최대한 빠른 시간안에 수정해드리겠습니다.
'컴퓨터 공학 일지 > C++' 카테고리의 다른 글
C++ 네임스페이스와 입출력문 std::cout | std::cin | std::endl (0) | 2019.12.16 |
---|---|
C++ 이름공간(네임스페이스{namespace}) (0) | 2019.12.16 |
C++ 인라인 함수 (0) | 2019.12.16 |
C++ 함수의 오버로딩 (0) | 2019.12.10 |
C++ 의 입출력 방식 (0) | 2019.12.08 |