まず、関数プロトタイプ宣言:
図1に示すように、関数宣言は、コンパイラ関数名を伝え、どの関数(戻り型とパラメータ)を呼び出す、関数定義は、関数の実際のボディを提供します。
2、必須:C ++では、関数定義の前に位置の関数は、関数プロトタイプ宣言は、関数呼び出しの前に呼び出された関数に行われなければならない必要とする場合。
3は、関数宣言では、パラメータ名は重要ではありません、唯一のパラメータ型が必要とされています。すなわち、以下の二つの書き込みが許可されます。
あなたは(最大あなたが、得るあなたy)は、 あなた MAX(もし、あなた)。
図4に示すように、関数定義(func.cpp)コード体(main.cppには)別々に、main.cppに内の#includeを追加し、「func.cpp」サイレントアウトは、コードファイルボディに直接関数を呼び出すことができます。
第二に、関数テンプレート
図1に示すように、パラメータの種類は:①、既知の値のデータは、関数のパラメータを介して送信することができ、データ値関数が未知で定義し、関数呼び出しの受信引数のみ、その値まで決定されます。
②また、データの種類ものパラメータを介して転送されてもよいです。関数呼び出しが発生した場合、コンパイラが自動的に実際のデータ型で渡されたパラメータを推測する、関数定義で特定のデータ型を示していません。
2、用語テンプレート機能は、実際に(それが指定しなくてもよい(戻り型、パラメータ・タイプ、ローカル変数の型を含む)データのタイプを使用し、代わりの仮想種類と、一般的な関数を作成します実際には、逆発生に応じて関数呼び出しに渡される引数の実数型を再導入するなど、)プレースホルダ識別子です。この一般的な関数が呼び出される関数テンプレート(テンプレート関数)。
書式#include <iostreamの> 使用して 名前空間はstdを、 // 通用函数定义 テンプレート<型名T1> T MAX(T、T Bを、T c)は 、{ もし、(B> A)、A = B。 もし(C> A)、A = C。 返します。 }
必要に応じて、図3に示すように、同一の、パラメータの種類の数を決定することができます。
テンプレート<typenameにT1、T2型名>
第三に、参照
1、パラメータ:関数パラメータを使用する場合は、受信した可変パラメータ値を宣言しなければなりません。これらのパラメータは、関数の仮パラメータになります。作成されたとしての機能を入力する際、他の仮パラメータと同じように、ローカル変数は、関数が終了したときに破壊され、関数内で宣言しました。
図2に示すように、関数が呼び出され、そこ機能には2つの通過の引数であり、操作の方法は、引数に戻すことができます。
①ポインタ呼び出し:パラメータコピーのアドレスパラメータ、②参照:パラメータコピーに参照パラメータ。
*による呼び出しの引数には影響しません。それは一方向のみの伝送で、引数の値は、パラメータが渡されます。
図3は、C ++で、「参照」変数は、エイリアス変数であるため、参照も、エイリアス(別名)として知られています。
引用された文言: 型名&引用名=変数名と同じタイプ。
INT N- = 40 ; INT&N-R =; // 参照変数Rは、N-に初期化される整数変数であり、宣言 COUT << Rと、 // 40を得ます
#Rが参照され、それは、型int&Rといえます
4、変数宣言への参照は、他のメモリユニット、Rを開き、N同じ可変部を示すものではありません。
図5に示すように、参照文、それが初期化する必要がありつつ:一般変数参照を初期化するために使用される、参照を参照して初期化することができる。最終的に使用することが表現は、変数の値を返し、次のように参照される初期化する式:
図1は // の関数としての基準値を返し 2 INT N- = 9 ; 3。 INT&値の代入(){ 戻りN-し;} 4。 INT (主に) 5。 { 6 のSetValue()= 90 ; 7。 COUT N - <<; // 出力90 8 リターン 0 ; 9 }
ここで説明する第三の列:値の代入()関数は、int型の値を返すと、すなわち、戻り型が基準値であり、戻り値がNである、すなわち、値の代入()はnの値への参照を返します。
戻り値は、値の利点は、等号、将来の出会いリピートの特定の役割の左側に配置することができるということである参照します。
四、CONST CONST参照:CONSTを参照して定義されます。
int型私は= 5。; のconst int型&アイは=; // 宣言しばしば参照 =を3。 ; //は、エラーが私の一定の基準値を変更しよう
多くの場合、元の変数の値を変更しないように参照することにより引用しますが、元の変数は、彼らが変更することができます。
五、のconst定数ポインタ
図1に示すように、一定のポインタを定義: const型名*ポインタ変数名。
図2に示すように、一定のポインタ、コンテンツへのポインタを変更することはできません。その含有量は一定のポインタ指示によって変更することができないが、ポインタに変更することができます。
INT N-、M; のconst int型 * P =&N - ; * P = 5 ; // コンパイルエラー、変更できないデータが指摘 N- = 4 ; // OK、それ自体がポイント変化し得るコンテンツ P =&M; // 定数ポインタポイントは変えることができます
4、定数ポインタは、そうでなければ、(推奨されません)することができ、非constポインタに割り当てることはできません。
1つ のconst int型 *のP1; 2 のint *のP2; 3 P1 = P2; // OK 4。 P2 = P1; // エラー 。5 P2 =(INT *)P1; // OK、キャスト
ほとんどの場合、値へのポインタの額に一定のポインタ(変更しない)を得るために(変更可能)を指している、あなたはポインタのconstの値を変更することができますが、constのポインタポイントは変更されない傾向にあります。
5、定ポインタ変数の値を保護します:
ボイド myprintf(CONST のchar *のP) { strcpyの(P、" この"); // コンパイルエラー のprintf(" %のS "、P); // OK }
ここで、pはconstのchar型*変数なので、コンパイルエラーであるのに対し、strcpyの()関数は、CHAR *変数を期待しています。定数ポインタpが変更されて保護されていません。