c++/c 언어 기반의 c++ 1

01-03 [C++] 매개변수의 디폴트 값 (Default Value)

TIM_0529 2022. 12. 27. 05:43
반응형

C++의 함수에는 '디폴트 값'이라는 것을 설정할 수 있다.

 

디폴트 값 이란 함수를 call 할 시 인자값을 전달하지 않아도 함수 선언시 매개변수의 값을 지정하여 전달 받는 것을 의미한다.

 

#include <iostream>
using namespace std;

int MyFuncOne(int num = 7) {
	return num + 1;
}
int MyFuncTwo(int num1 = 7,int num2 = 5) {
	return num1 + num2;
}
int main()
{

}

위 코드에서 

MyFunccOne(); 를 메인에서 작성한다고 하면 MyFuncOne 함수는 인자값으로 값을 전달받지 않았더라도 자동으로 num = 7로 간주하고 값을 리턴한다.

 

MyFuncOne() 함수에서 인자값을 받지 않고 num을 7로 계산하여 리턴한 값이 8이 된다.

 

함수의 원형을 별도로 선언하는 경우에는 선언 시에만 디폴트 값을 지정하면 된다.

#include <iostream>
using namespace std;

int MyFuncOne(int num = 7);
int main()
{
	cout << MyFuncOne();
}

int MyFuncOne(int num )
{

}

 

부분적 디폴트 값 설정


함수 생성시 매개변수가 여러개 라고 가정하고

int MyFunc(int one, int two, int three); 

이러한 경우 부분적 디폴트 값을 설정할 수 있다.

 

int MyFunc(int one, int two = 44, int three = 21);

 

하지만 여기서 주의해야 할 점은 디폴트 값은 오른쪽 부터 채워 줘야 한다는 것이다. 그 이유는 함수의 전달되는 인자가 왼쪽부터 오른쪽으로 채워지기 때문이다.

 

디폴트 값과 오버로딩 사용시 주의할 점


다음은 컴파일 에러가 발생한다.

#include <iostream>
using namespace std;

int BoxVolume(int length, int width, int height) {
	return length * width * height;
}

int BoxVolume(int length, int width=1) {
	return length * width;
}

int BoxVolume(int length) {
	return length;
}


int main()
{
	cout << BoxVolume(3,3,3)<<endl;
	cout << BoxVolume(5,5)<<endl;
	cout << BoxVolume(7)<<endl;
}

 

그 이유는 두번째 오버로딩된 BoxVolume() 함수와 그 다음 BoxVolume() 함수가 같기 때문인데

분명 매개변수 int width 가 하나 더 있지만 같다고 보는 이유는 width 변수는 디폴트 값이 설정되어서 값이 전해지지 않아도 저 함수를 call 한 것으로 볼 수 있다. 하지만 그렇게 되면 인자값을 하나만 전달 했을때 2 번째 3 번째 BoxVolume() 함수가 같게 되므로 어떤 함수를 호출하는지 컴파일러는 알 수 없게 되므로 에러를 발생하게 됩니다.

반응형