본문 바로가기

컴퓨터

1-3. 디폴트(Default) 매개 변수

디폴트 매개 변수란?

C++에서는 매개 변수를 선언할 때 기본 값을 설정할 수 있다. 이것을 디폴트 매개변수라고 한다.

#include <iostream>

int function(int a = 0) {
	return a + 1;
}

int main(void) {
	std::cout << function(11) << std::endl;
	std::cout << function() << std::endl;
	
	return 0;
}

8: 매개변수로 11을 줬고, 그대로 설정된다.

9: 매개변수를 주지 않았고, 디폴트 매개 변수인 0이 설정된다.

다양한 형태의 디폴트 매개 변수 설정

#include <iostream>

int BoxVolume(int length, int width = 1, int height = 1);

int main(void) {
	std::cout << "[3, 3, 3] : "<<BoxVolume(3, 3, 3)<< std::endl;
	std::cout << "[5, 5, def] : " << BoxVolume(5, 5) << std::endl;
	std::cout << "[7, def, def] : " << BoxVolume(7) << std::endl;
		
	return 0;
}

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

3: 함수의 선언과 정의를 따로 할 경우, 디폴트 매개 변수는 선언 부분에 놓여져야 한다.

7: 2개의 인자가 전달되고 있는데 함수 호출 시 전달되는 인자들은 무조건 왼쪽에서부터 채워진다. 그리고 나머지가 디폴트 매개 변수로 설정된다.

디폴트 매개 변수와 함수의 오버 로딩

디폴트 매개 변수와 함수 오버 로딩을 동시에 절못 정의하는 경우가 있는데, 이런 경우는 꼭 피해야 된다. 

#include <iostream>

int function(int a = 10) {
	return a + 1;
}

int function(void) {
	return 10;
}

int main(void) {
	std::cout << function() << std::endl;
	return 0;
}

3, 7: 두 함수는 이름은 같지만 매개변수의 타입이 다르므로 오버 로딩되는 데에 문제가 없다.

12: function() 호출에 3라인의 함수와 7라인의 함수중 어떤 함수가 호출될 것인가?