함수6 c,c++ 프로그래밍

함수 오버로딩

//두수를 더하여 값을 얻어오는 함수
void getAdd( int nData1, int nData2, int *pResult );
int getAdd( int nData1, int nData2 );

int _tmain(int argc, _TCHAR* argv[])
{
int nResult = 0;

nResult = getAdd( 10, 10 );

getAdd(10,10, &nResult);

return 0;
}

void getAdd( int nData1, int nData2, int *pResult )
{
*pResult = nData1 + nData2 ;
}
int getAdd( int nData1, int nData2 )
{
return nData1 + nData2;
}

위와 같은 내용으로 함수를 만들수 있는데

nResult = getAdd( 10, 10 );

getAdd(10,10, &nResult);

이부분을 사용함에 있어 전혀 문제가 없다. 그 이유는 빌드 과정에서 컴파일러 과정을 거치고 링크 과정에서 함수 이름과 인수를 각각 확인하여 연결하기 떄문에 문제가 발생하지 않는다.

따라서 함수의 이름은 같고 함수의 인수가 다르면 사용가능하다. 이를 함수 오버로딩이라 한다.
함수의 리턴타임은 이에 관련이 없다. 이는 링크과정에서 리턴타입을 확인하여 연결하지 않게 때문이다. 

오버로딩을 사용할때는 잘 사용해야한다. 애매한 이름의 같은 기능을 가진 함수를 오버로딩하기보다는 함수의 이름을 정확하게 구분 지어 각각 만들어주는 편이 좋을것이다.

디폴트인수

int getAddData(int nData1, int nData2, int nData3, int nData4 = 100);

int _tmain(int argc, _TCHAR* argv[])
{
printf( "%d\n" ,getAddData( 0,0,0) );
printf( "%d\n" ,getAddData( 0,0,0,1 ) );
return 0;
}

int getAddData(int nData1, int nData2, int nData3, int nData4)
{
return nData1 + nData2 + nData3 + nData4;
}

함수의 디폴트값을 세팅할때는 정의부분에서만 가능하다. 디폴트 값을 세팅하면 함수 사용시 인자값을 입력하지 않을경우 자동적으로 적용시켜주는 것이다. 위의 경우 실행하면 100, 1 의 값이 출력될것이다.

디폴트값 세팅할때는 제일 뒤부터 세팅해나가야한다. 중간부분 디폴트 세팅은 함수 사용시 어떤인자가 사용될지 알수 없기 떄문이다.

int getAddData(int nData1, int nData2 = 1, int nData3 = 10, int nData4 = 100);
int getAddData(int nData1, int nData2 );

위와 같이 정의 될 경우 문제가 생기는 경우가 있다.

getAddData( 0 , 0 ); 의 경우는 함수가 어떤부분을 사용할지 알수 없기 떄문에 문제가 생긴다.



덧글

댓글 입력 영역