関数のオーバーロード
関数のオーバーロードが関与しないC言語学習における新しい概念です。私たちは、多くの場合、プログラミングでこのような問題が発生します。私たちは、パラメータの異なるデータ型を渡す必要性と、機能を実現することができない、とき準備する準備ができて呼び出す関数を書いて、私たちは別のものを書き直し以上命名しなければなりません同じ関数パラメータを達成するための異なるデータ型を渡すが、不必要な難易度を追加し、異なる名前で関数を呼び出す必要があり、ことは明らかである、その動作を実現するために、近似関数を機能しません。このとき、関数のオーバーロードは、私たちのソリューションを提供します。
ベストマッチコンパイラの引数と、自動的に関数呼び出しを決めるパラメータの種類と数に基づいて、同じ名前を持つ2つの以上の機能が、異なる種類や数、パラメータ、:(1)定義。
次の関数のオーバーロードでは、我々は近似が、異なる関数パラメータ、関数名機能で指定されたさまざまな機能の必要性は、コンパイラが自動的に一致します。
例えば、機能を実現するのx + yの関数:
書式#include <iostreamの> 使用して 名前空間はstdを、 INT(追加INT A、INT B) { 返す + ; Bは } ダブル追加(ダブル、ダブルB)を { 返す + B。 } int型のmain() { int型、B。 ダブルC、D; 裁判所未満 << " 输入两个int型值" << てendl; CIN >> A >> B; 裁判所未満 << 「ダブル两个输入值" << ENDL; CIN >> C D; COUT << " 値INTがなる" <<追加(A、B)<< ENDL; COUT << " Double値となる「追加(C << 、D)<< ENDL; 戻り 0 ; }
出力は次のようになります。
機能のために同じ関数名を呼んで、コンパイラが自動的に一致します:コードのコンパイルは、ことを示すことができます。
注意:オーバーロード関数のパラメータは、同じ関数名、パラメータ型が同じであれば、コンパイル時には構文エラーと見なされる、タイプまたは引数の数の点で異なっている必要があります。
機能の正しいフォームを再ロードします。
int型の 追加(int型のx、int型のY)。 ダブル追加(ダブルX、ダブル Y);
または:
あなたは(追加あなたは、取得あなたy)は、 あなたは追加(あなたが取得し、あなたのy、あなた Z);
それは特別な注意が混乱して表示された関数を呼び出した結果の誤解を避けるために、オーバーロード関数の異なる機能のための関数定義ではありません必要があります。
(2)曖昧さを回避するために、関数のオーバーロードを使用する場合、コンパイラの構文エラーを引き起こす、生じます。
声明:
あなたは(追加、あなたが取得する、あなたは yは= 1を、あなたのz = 2 ); あなたは追加(あなたのx);
コール:
(追加1)。
この構文でエラーが発生します。
(3)まとめた状況があいまいな表示されます:
1、契約パラメータの数、またはパラメータ名だけ異なる戻り値
重負荷関数パラメータはデフォルトパラメータ有するある2、
3を、多重定義関数のパラメータまたはそれぞれ同じ位置に型を渡す値参照。