次の方法で共有


関数オーバーロード

C++ では同じスコープで同じ名前の複数の機能仕様ができます。これらはオーバーロードされた関数と呼ばれオーバーロードで詳しく説明します。引数の種類と数によって関数の異なる意味を指定するオーバーロードされた関数のプログラマ。

たとえば文字列または char *) 引数を受け取る 印刷 の関数は 倍精度浮動小数点型 型の引数を受け取る 1 より大きく異なるタスクを実行します。名前付けの割り当ても均一のオーバーロードはprint_sz または print_d などの名前を作成する必要がなくなります。プログラマはC++ 関数宣言のどの部分を同じスコープで同じ名前で関数のグループを識別するために使用するかを次の表に示します。

オーバーロードの考慮事項

関数宣言要素

オーバーロードに使用されます。

関数の戻り値の型

引数の数

引数の型

省略記号の有無

typedef 名の使用

未指定の配列の範囲

定数 または volatile (以下を参照)

関数の戻り値の型に基づいて重要ですがこの基本ではオーバーロードできません。 クラスに this へのポインターを適用するとのクラスで使用されている場合にだけ Const または volatile は関数の戻り値の型をベースとするオーバーロード使用されます。つまり 定数 または 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++ の他の要素にどのように影響するかオーバーロード を参照してください。

参照

関連項目

関数宣言