본문 바로가기
공부/개발노트

[C/C++] 함수 오버로딩 디폴트값(defalut 값) 기본값

반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int Adder(int num1 = 1int num2 = 2// 매개변수에 기본값 설정(1,2) 
{
    return num1+num2;
}
 
int main()
{
    cout << Adder() << endl// 인자 전달하지 않았으므로 1과 2가 전달된 것으로 간주 
    cout << Adder(5<< endl// 첫 번째 인자만 전달해주고 있으므로 두 번째 인자는 자동적으로 2로 전달
    cout << Adder(35<< endl// 인자를 3과 5로 전달(매개변수 기본값은 의미 없음) 
        
    return 0;
}
cs

 

 

디폴트값은 함수의 선언 부분에만 표현하기만 하면됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int Adder(int num1 = 1int num2 = 2); // 매개변수에 기본값 설정(1,2) 
 
int main()
{
    cout << Adder() << endl// 인자 전달하지 않았으므로 1과 2가 전달된 것으로 간주 
    cout << Adder(5<< endl// 첫 번째 인자만 전달해주고 있으므로 두 번째 인자는 자동적으로 2로 전달
    cout << Adder(35<< endl// 인자를 3과 5로 전달(매개변수 기본값은 의미 없음) 
        
    return 0;
}
 
int Adder(int num1, int num2)
{
    return num1+num2;
}
cs

 

디폴트값 설정에 따른 주의사항

 

1
2
3
4
int Func(int num1 = 1int num2 = 2int num3)
{
    // 정의 
cs

 

1
2
3
4
int Func(int num1 = 1int num2, int num3)
{
    // 정의 
cs

 

위 두 예제는 디폴트값 설정이 잘 못되었습니다.

 

우리가 메인함수에 Func(1,2,3)으로 설정하면 상관이 없는데 만약 Func(1)이나 Func(1,2)를 컴파일했다고 가정하자면 매개변수 num3에 전달된 인자가 없으므로 컴파일 에러가 뜬게됩니다.

 

 

하지만 아래와 같은 경우는 가능합니다.

 

1
2
3
4
5
int Func(int num1, int num2, int num3 = 3)
{
    return num1+num2+num3; 
 
cs

 

1
2
3
4
5
int Func(int num1, int num2 = 2int num3 = 3)
{
    return num1+num2+num3; 
 
cs

 

이유는 Func(1)으로 구현하면 num1은 메인함수에 선언한 1을 인자 전달하며, num2는 기본값 2, num3은 기본값 3을 가지기때문에 오류가 안뜨는 것입니다.

반응형