공부중

[VS2012]매개변수의 디폴트 값(Default Value) 본문

Programing/C, C++

[VS2012]매개변수의 디폴트 값(Default Value)

곤란 2012. 12. 6. 17:11
반응형

 

디폴트 값이란 무엇일까??

디폴트 값은 기본적으로 설정되어있는 값을 의미한다.

그렇다면 매개변수의 디폴트 값은

함수 호출에서 실제 전달인자를 생략했을 경우에 실제 전달인자 대신 사용되는 값이다.

 

예를 들어서

void Example(int nNumber)

위와 같은 함수에서 nNumber가 만약에 10으로 디폴트 값을 지정했다면

 

Example();

이라고 호출 했을 경우 이 함수 호출은 Example(10);와 같은 함수 호출이 된다.

 

다음 함수를 보자.

void SUM1(int nNumber = 10)

{

    return nNumber+1;

}

여기서 SUM1 함수의 매개변수 선언은 int nNumber = 10 이다.

이 선언은 함수 호출 시 인자를 전달하지 않을 경우 10이 전달된 것으로 정의하겠다 라는 의미가 된다.

 

그러므로 함수 호출에 있어서

SUM1();

SUM1(10);

이 두 함수 호출은 같다.

 

이어서

void SUM2(int nNumber1 = 10 , int nNumber2 = 100)

{

    return nNumber1 + nNumber2;

}

 

이 함수도 위와 같이

함수 호출시 인자를 전달 하지 않을경우 nNumber1 에 10이 nNumber2에 100 이 전달된 것으로 정의 하겠다라는 의미이다.

SUM2();

SUM2(10,100);

위 두 함수 호출도 같다.

 

 

소스코드를 보자

DefaultValue.h

#pragma once

 

int SUM1(int nNumber = 10);

 

int SUM2(int nNumber1 = 10 , int nNumber2 = 100);

DefaultValue.cpp

#include "DefaultValue.h"

 

int SUM1(int nNumber)

{

    return nNumber+1;

}

 

int SUM2(int nNumber1, int nNumber2)

{

    return nNumber1 + nNumber2;

}

Main.cpp

#include <iostream>

 

#include "DefaultValue.h"

 

int main()

{

    std::cout<<SUM1()<<std::endl;

    std::cout<<SUM1(20)<<std::endl;

    std::cout<<SUM2()<<std::endl;

    std::cout<<SUM2(500)<<std::endl;

    std::cout<<SUM2(500,200)<<std::endl;

 

    return 0;

 

}

 

 

위의 소스코드로 알 수 있는 사실은

전달되는 인자는 왼쪽에서부터 채워져 나가고 나머지 부족분은 디폴트 값으로 채워진다.

 

그리고 함수의 원형을 별도로 선언하는 경우 매개변수의 디폴트 값은 함수의 원형 선언에만 위치 시켜야 한다.

 

디폴트 값은 부분적으로도 설정이 가능한데..

다음 함수의 정의를 보면

  1. int SUM3(int nNumber1 = 10    , int nNumber2    , int nNumber3    );
  2. int SUM3(int nNumber1 = 10    , int nNumber2 = 20    , int nNumber3    );
  3. int SUM3(int nNumber1 = 10    , int nNumber2 = 20    , int nNumber3 = 30    );
  4. int SUM3(int nNumber1 = 10    , int nNumber2    , int nNumber3 = 30    );
  5. int SUM3(int nNumber1    , int nNumber2 = 20    , int nNumber3 = 30    );
  6. int SUM3(int nNumber1    , int nNumber2    , int nNumber3 = 30    );

 

다음 6가지 중에서 유요한 함수 정의는 어떤 것들일까??

3번 , 5번 6번이 유효한 함수 정의이다.

 

반드시 오른쪽에서 왼쪽의 순서로 매개변수의 디폴트 값부터 채우는 형태로 정의하여야 한다.

그 이유는 함수에 전달되는 인자는 왼쪽에서부터 오른쪽으로 채워지기 때문에 전달인자를 건너 뛸 수 없고

오른쪽부터 채워진 함수의 정의만이 의미를 가진다.

 

DefaultValue.h

#pragma once

 

int SUM3(int nNumber1        , int nNumber2 = 20    , int nNumber3 = 30    );

DefaultValue.cpp

#include "DefaultValue.h"

 

int SUM3(int nNumber1 , int nNumber2 , int nNumber3 )

{

    return nNumber1 + nNumber2 + nNumber3;

}

Main.cpp

#include <iostream>

 

#include "DefaultValue.h"

 

int main()

{

    //std::cout<<SUM3()<<std::endl; 디폴트 값이 전부 정의 되지 않았으므로 컴파일에러

    std::cout<<SUM3(10)<<std::endl;

    std::cout<<SUM3(15,10)<<std::endl;

    std::cout<<SUM3(50,10,30)<<std::endl;

    return 0;

 

}

 

 

반응형