#incule <iostream>
void Func(int Number = 10)
{
printf_s("%d\n" , Number)
}
int main()
{
Func();
Func(30);
}
함수의 인자에 기본값을 넣어줄 수 있다.
인자를 넣어서 호출하는 방식과
넣지 않고 호출하는 방식 2가지를 모두 다 사용할 수 있다.
void Func()
{
printf_s("%d\n" , 10)
}
사실 위의 함수가 하나 더 만들어 진다고 생각하면 된다.
이 말은 즉 기본 인자를 넣고 함수를 만들면 void Func() 라는 함수는 만들 수 없다는 것과 같은 말이다.
void Func(int Number = 50, int Number 2 = 100)
{
}
인자가 여러개 일때도 사용할 수 있다. 그치만 주의할 점이 있다
void Func(int Number2 = 50, int Number1, int Number = 10)
{
}
이런식으로 사용하면 에러가 난다.
함수를 호출할 때 인자를 몇개를 넣어줘야 하는지 알 수 없기 때문이다.
void Func(int Number2, int Number1, int Number = 10)
{
}
사용 가능하다.함수를 호출할때 첫번째,두번째 인자를 넣어주고
세번째에는 값을 넣어주든 안넣어주든 상관 없다는 뜻이다.
즉, 디폴트 인자를 사용하면 가장 오른쪽에 사용되있어야 하고
디폴트 인자를 사용했다면 사용한 인자의 다음 인자부터는
모두 디폴트 인자를 사용해야 한다.
오버로딩 규칙도 사용 가능하다.
※주의할점※
void TestFunc(char Number2, int Number1, int Number = 10)
{
printf_s("%d\n" , Number);
}
void TestFunc(char Number2, int Number1, char Number = 10)
{
printf_s("%d\n" , Number);
}
네임맹글링에 의해 오버로딩되서 문제 없다고 생각 할 수 있지만
사용 할 수 없다. 자료형이 다르지만 디폴트 인자가 상수로 들어가기 때문에
컴파일러는 같은 이름의 함수로 본다.
'C++' 카테고리의 다른 글
UserTypeHeap (0) | 2020.12.15 |
---|---|
Destructor(소멸자) (0) | 2020.12.13 |
OverLoading , 컴파일 4단계,네임맹글링 (0) | 2020.12.13 |
nullptrObject (0) | 2020.12.13 |
함수 호출 규약 (0) | 2020.12.13 |