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로 간주하고 값을 리턴한다.
함수의 원형을 별도로 선언하는 경우에는 선언 시에만 디폴트 값을 지정하면 된다.
#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() 함수가 같게 되므로 어떤 함수를 호출하는지 컴파일러는 알 수 없게 되므로 에러를 발생하게 됩니다.
'c++ > c 언어 기반의 c++ 1' 카테고리의 다른 글
01-06 [C++] OOP 프로젝트 Bank Account (0) | 2022.12.28 |
---|---|
01-05 [C++] 이름공간 (namespace) 이해하기 (0) | 2022.12.28 |
01-04 [C++]인라인 (Inline) 함수 (2) | 2022.12.28 |
01-02 [C++] 함수 오버로딩 (Function Overloading) (2) | 2022.12.27 |
01-01 [c++] 입 출력 연산자 (0) | 2022.12.27 |