C++에서는 매개변수에서 디폴트 값을 지정할 수 있다.
(java에서는 불가능)
ex)
#include <iostream>
using namespace std;
int myFunc(int num1 = 3, int num2 = 5)
{
return num1 + num2;
}
위의 함수의 경우 매개변수에 값을 전달하지 않는다면, num1은 3, num2에는 5가 할당되게 된다.
ex)
#include <iostream>
using namespace std;
int myFunc(int num1 = 3, int num = 5);
int main(void)
{
cout << myFunc();
cout << myFunc();
return 0;
}
int myFunc(int num1, num2)
{
return num1+num2;
}
위 예시에서는 main 함수 상단부에서 함수를 선언하고, 하단부에서는 함수를 재정의하고 있다.
C++의 경우, 함수 선언문이 메인 함수보다 상단에 위치해 있지 않는다면 compile 오류가 발생한다.
ex)
#include <iostream>
using namespace std;
int myFunc1(int num1, int num2, int num3 = 8) { ... } (O)
int myFunc2(int num1 = 3, int num2, int num3) { ... }. (X)
myFunc1 함수는 오른쪽부터 디폴트 값을 채워넣고,
myFunc2 함수는 왼쪽부터 디폴트 값을 채워넣은 모습이다.
왜 왼쪽부터 채워넣은 myFunc2 함수는 컴파일 에러가 발생할까?
이유는 간단하다.
C++는 매개변수를 왼쪽부터 채워넣기 때문이다.
이미 값이 있는 매개변수에 값을 넣어버리면, 나머지에는 디폴트 값이 할당되지 않은 매개변수들이 남게 되어, 컴파일 에러가 발생하는 것이다.