함수 오버 로드
C + +는 동일한 범위에서 이름이 같은 여러 개의 함수 사양을.이러한 오버 로드 된 함수가 호출 되지 및 오버 로딩에 자세히 설명 되어 있습니다.프로그래머가 함수 인수의 형식에 따라 서로 다른 의미 체계를 제공 하 여 오버 로드 된 함수를 사용 합니다.
예를 들어 있는 인쇄 는 문자열 함수 (또는 char *) 인수 형식의 인수를 사용 하는 보다 매우 다른 작업을 수행 이중.오버 로드 및 균일 한 이름을 지정할 수 있도록 프로그래머가 이름으로 만들 필요가 없습니다 print_sz 또는 print_d.C + + 함수 선언 부분 사용 하는 동일한 범위에서 이름이 같은 함수 그룹을 구분 하는 다음 표에서 보여 줍니다.
오버 로드 시 고려 사항
함수 선언 요소 |
오버 로딩을 사용 합니까? |
---|---|
함수의 반환 형식 |
아니요 |
인수의 개수 |
예 |
형식 인수 |
예 |
줄임표 (...)의 존재 여부 |
예 |
사용 하 여 typedef 이름 |
아니요 |
지정 하지 않은 배열 범위 |
아니요 |
const 또는 volatile (아래 참조) |
예 |
함수 반환 형식을 기반으로 구분할 수 있지만, 이들은이 기초로 오버 로드 수 없습니다.Const또는 volatile 만 기준으로 적용 하는 클래스에서 사용할 경우에 오버 로드에 대 한 사용 됩니다 있는 이 함수의 반환 형식이 아니라 클래스에 대 한 포인터입니다.즉, 오버 로드 경우에 적용 하는 const 또는 volatile 키워드는 선언에서 인수 목록은 함수 뒤에.
예제
다음 예제에서는 오버 로드 사용 하는 방법을 보여 줍니다.같은 문제를 해결 하는 또 다른 방법은 제시 기본 인수.
// function_overloading.cpp
// compile with: /EHsc
#include <iostream>
#include <math.h>
// Prototype three print functions.
int print( char *s ); // Print a string.
int print( double dvalue ); // Print a double.
int print( double dvalue, int prec ); // Print a double with a
// given precision.
using namespace std;
int main( int argc, char *argv[] )
{
const double d = 893094.2987;
if( argc < 2 )
{
// These calls to print invoke print( char *s ).
print( "This program requires one argument." );
print( "The argument specifies the number of" );
print( "digits precision for the second number" );
print( "printed." );
exit(0);
}
// Invoke print( double dvalue ).
print( d );
// Invoke print( double dvalue, int prec ).
print( d, atoi( argv[1] ) );
}
// Print a string.
int print( char *s )
{
cout << s << endl;
return cout.good();
}
// Print a double in default precision.
int print( double dvalue )
{
cout << dvalue << endl;
return cout.good();
}
// Print a double in specified precision.
// Positive numbers for precision indicate how many digits
// precision after the decimal point to show. Negative
// numbers for precision indicate where to round the number
// to the left of the decimal point.
int print( double dvalue, int prec )
{
// Use table-lookup for rounding/truncation.
static const double rgPow10[] = {
10E-7, 10E-6, 10E-5, 10E-4, 10E-3, 10E-2, 10E-1, 10E0,
10E1, 10E2, 10E3, 10E4, 10E5, 10E6
};
const int iPowZero = 6;
// If precision out of range, just print the number.
if( prec < -6 || prec > 7 )
return print( dvalue );
// Scale, truncate, then rescale.
dvalue = floor( dvalue / rgPow10[iPowZero - prec] ) *
rgPow10[iPowZero - prec];
cout << dvalue << endl;
return cout.good();
}
앞의 코드를 보여 주는의 오버 로드는 print 함수에서 파일 범위입니다.
오버 로드에 대 한 제한 및 오버 C++의 다른 요소에 미치는 영향에 대 한 정보를 참조 하십시오 오버 로드.