C++에서는 "디폴트 값"이라는 것을 설정할 수 있다.
"디폴트 값" 이란 "기본적으로 설정되어 있는 값"을 의미한다.
이와 같이 인자를 전달받지 않으면 출력해줄 기본적으로 설정되어 있는 값을 인자에 써주는것이다.
예제를 통해 이를 확인해보자 .
#include <iostream>
int Adder(int num1 = 1, int num2 = 2)
{
return num1 + num2;
}
int main(void)
{
std::cout<<Adder()<<std::endl;
std::cout<<Adder(2)<<std::endl;
std::cout<<Adder(3,5)<<std::endl;
return 0;
}
이를 통해서 다음과 같은 사실도 알수있다.
"매개변수에 디폴트 값이 설정되어 있으면, 선언된 매개변수의 수보다 적은 수의 인자전달이 가능하다. 그리고 전달된 인자는 왼쪽에서부터 채워져 나가고, 부족분은 디폴트 값으로 채워진다."
#include <iostream>
int Adder(int num1=1,int num2=2);
int main(void)
{
std::cout<<Adder()<<std::endl;
std::cout<<Adder(2)<<std::endl;
std::cout<<Adder(3,5)<<std::endl;
return 0;
}
int Adder(int num1 , int num2)
{
return num1 + num2;
}
이렇듯 함수의 선언 부분에만 디폴트 값을 표현하고 정의부분에서는 표현하면 안된다.
만약 선언부분에 디폴트 값이 위치하지 않는디면 main의 첫번째와 두번째 줄이 실행 가능하겠는가?
이렇듯 디폴트 값을 부분적으로 줄수있지만 !!
무조건 오른쪽에서부터 줘야한다.
그 이유는 YourFunc(10,20)이 메인 함수에
int YourFunc(int num1=1,int num2,int num3);라는 함수가 있다고 생각해보자.
함수에 전달되는 인자가 왼쪽에서부터 오른쪽으로 채워지니 num3는 아무 인자도 전달 받지 못할것 아닌가!?
그러므로 오른쪽에서부터 채워야한다.
그럼 다음 예제를 보고
디폴트 값 지정을 끝 마치자!
#include <iostream>
int BoxVloume(int length,int width =1 ,int height = 1);
int main(void)
{
std::cout<<"[3, 3, 3] : "<<BoxVloume(3,3,3)<<std::endl;
std::cout<<"[5, 5, D] : "<<BoxVloume(5,5)<<std::endl;
std::cout<<"[7, D, D] : "<<BoxVloume(7)<<std::endl;
//std::cout<<"[D, D, D] : "<<BoxVloume()<<std::endl; 에러 !!
return 0;
}
int BoxVloume(int length,int width ,int height)
{
return length*width*height;
};