티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
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(5) << std::endl;
std::cout << Adder(3, 5) << std::endl;
return 0;
}
/*
실행결과
3
7
8
*/
위의 예제에서 Adder 함수를 정의하는데 매개변수를 보면 num1은 1, num2는 2로 초기화되어 있습니다. 그리고 main함수에서 이 함수를 세 번 호출하는데 인수로 건네주는 값이 다 다릅니다.
Adder함수는 인수를 2개 받습니다. 만약 인수를 하나도 주지 않을 경우, 이 함수는 num1을 1, num2를 2로 간주합니다. 만약 인수를 하나만 주었을 경우, num1에 그 값을 저장하고 num2는 2로 간주합니다. 이때 num1과 num2가 각각 1과 2로 간주되도록 하는 값 1, 2가 바로 디폴트 값입니다. 이처럼 C++의 함수는 매개변수를 전해주지 않을 경우 매개변수에 디폴트 값을 저장하여 사용합니다.
디폴트 값은 함수의 선언 부분에만 표현하면 됩니다. C++에서는 함수의 선언과 정의를 한 번에 하고 있지만, 만약 C언어와 같이 선언과 정의를 따로 할 경우 선언부에서만 디폴트 값을 정해주면 정의할 때는 따로 디폴트 값을 정해주지 않아도 됩니다. 예제를 통해 확인해보겠습니다.
#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;
}
/*
실행결과
3
7
8
*/
위와 같이 함수의 선언과 정의를 따로 할 때는 선언부에만 디폴트 값을 설정해주면 됩니다.
함수의 모든 매개변수에 대해 디폴트 값을 설정하지 않고, 일부만 디폴트 값을 설정할 수도 있습니다. 하지만 이때는 주의해야 할 점이 하나 있습니다. 매개변수의 일부에만 디폴트 값을 설정하는 경우 가장 오른쪽의 매개변수부터 설정해주어야 합니다.
//가능한 디폴트 값 설정방법
int Adder(int num1, int num2, int num3 = 3) {...}
int Adder(int num1, int num2 = 2, int num3 = 3) {...}
int Adder(int num1 = 1, int num2 = 2, int num3 = 3) {...}
//불가능한 디폴트 값 설정방법
int Adder(int num1 = 1, int num2, int num3) {...}
int Adder(int num1 = 1, int num2 = 2, int num3) {...}
int Adder(int num1 = 1, int num2, int num3 = 3) {...}
위와 같이 매개변수에 디폴트 값을 설정할 때는 가장 오른쪽의 매개변수부터 채워야 하며, 오른쪽부터 채울 때도 중간을 건너뛰고 다음 매개변수에 디폴트 값을 설정하는 것은 안 됩니다. 왜냐하면 해당 함수를 호출할 때 입력된 매개 변수는 가장 왼쪽부터 차례로 채워지기 때문입니다. 다음의 예제를 보겠습니다.
int main()
{
sum(2, 3); //a에 2, b에 3이 대입되지만 c는 아무 값을 가지지 못한다
}
int sum(int a = 1, int b, int c)
{
return a + b + c;
}
위 예제의 sum 함수는 첫 번째 매개변수만 1의 디폴트 값을 가집니다. 나머지 b와 c는 디폴트 값을 가지지 못하므로 이 함수를 제대로 사용하기 위해서는 함수를 호출할 때 b와 c에는 반드시 값을 대입해주어야 합니다. 하지만 main 함수에서와 같이 매개 변수를 2개만 입력하면 가장 왼쪽의 매개 변수부터 값을 받으므로 a에 2, b에 3이 대입됩니다. c는 아무런 값을 가지지 못하므로 에러를 발생시킵니다. 사실 위 예제처럼 sum 함수를 정의하기만 해도 컴파일러가 에러를 발생할 것입니다.
'공부 일지 > CPP 공부 일지' 카테고리의 다른 글
C++ | 새로운 자료형 bool (0) | 2021.07.31 |
---|---|
C++ | 네임스페이스(namespace) (0) | 2021.07.31 |
C++ | 인라인(inline) 함수 (0) | 2021.07.31 |
C++ | 함수 오버로딩 (0) | 2021.07.31 |
C++ | 표준 입출력과 출력 포맷 (0) | 2021.07.31 |