매개변수에 설정하는 '디폴트 값'의 의미
#include <iostream>
int Adder(int num1 = 1, int num2 = 2)
{
return num1 + num2;
}
int main(void)
{
std::cout << Adder() << std::endl; // Adder 함수의 디폴트 값으로 1과 2가 설정됨
std::cout << Adder(5) << std::endl; // 인자 5가 첫 번째 매개변수로 전달
std::cout << Adder(3, 5) << std::endl; // 두 개의 인자 3과 5가 첫 번째 두 번째 매개변수로 전달
return 0;
}
==> 위의 예제에서 볼 수 있듯이 함수의 매개변수에 디폴트 값이 설정되어 있으면, 선언된 매개변수의 수보다 적은 수의 인자전달이 가능하다. 그리고 전달되는 인자는 왼쪽에서부터 채워져 나가고, 부족분은 디폴트 값으로 채워진다.
디폴트 값은 함수의 선언 부분에만 표현하면 됩니다
#include <iostream>
int Adder(int num1 = 1, int num2 = 2); // 함수의 선언부분에 디폴트 값을 선언했다
int main(void)
{
std::cout << Adder() << std::endl;
std::cout << Adder(5) << std::endl;
std::cout << Adder(3, 5) << std::endl;
return 0;
}
int Adder(int num1, int num2)
{
return num1 + num2;
}
==> 만약 함수의 선언부분에 디폴트 값이 선언되지 않았다면 Adder(5)와 Adder(3, 5)는 출력이 되지 않았을 것이다
부분적 디폴트 값 설정
오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 한다
==> 함수에 전달되는 인자가 왼쪽에서부터 오른쪽으로 채워지기 때문이다 (만약 왼쪽 매개변수의 디폴트 값부터 채우게 되면 인자가 전부 채워지지 않았을 때 컴파일 오류가 나게 된다)
#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, D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7, D, D] : " << BoxVolume(7) << std::endl;
// std::cout << "[D, D, D] : " << BoxVolume() << std::endl;
return 0;
}
int BoxVolume(int length, int width, int height)
{
return length * width * height;
}
int BoxVolume(int length, int width = 1, int height = 1);
==> 첫 번째 매개변수에는 디폴트 값이 지정되지 않았으므로, BoxVolume 함수를 호출할 때는 반드시 하나 이상의 인자를 전달해야 한다.
std::cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << std::endl;
std::cout << "[5, 5, D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7, D, D] : " << BoxVolume(7) << std::endl;
==> 모두 유효한 함수 호출문이다. 전달되는 인자는 왼쪽에서부터 채워지고 부족한 부분은 디폴트 값이 대신 전달된다.
std::cout << "[D, D, D] : " << BoxVolume() << std::endl;
==> 모든 매개변수에 디폴트 값이 지정된 것이 아니기 때문에, 인자를 전달하지 않는 형태의 함수 호출은 컴파일 에러로 이어진다
'C++ 이야기 (열혈) > C언어 기반의 C++' 카테고리의 다른 글
6. OOP 단계별 프로젝트 01단계 (0) | 2023.01.10 |
---|---|
5. 이름공간(namespace)에 대한 소개 (0) | 2023.01.10 |
4. 인라인(inline) 함수 (0) | 2023.01.02 |
2. 함수 오버로딩 (Function Overloading) (0) | 2022.12.30 |
1. printf와 scanf를 대신하는 입출력 방식 (0) | 2022.12.27 |