のC ++関数ポインタ機能

関数型そのことによってリターンクラスのタイプパラメータの型共同意思決定:

1  // 文字列オブジェクトの2つの長さの比較
2  BOOL lengthCompare(CONST  文字列&、CONST  文字列&)と、

 

  上記の関数の型は次のとおりです。BOOL(定数文字列&、constの文字列&) あなたが宣言したい場合は、この関数へのポインタを、唯一の関数ポインタ名を交換する必要があります。次のように:

  BOOL(PF *)(CONST文字列&、CONST文字列&) ; // PF点関数に、関数パラメータは、戻り値はbool型の2つのCONST文字列への参照です。

、右側はパラメータリストである関数パラメータがconstの文字列への参照であることを特徴関数は、戻り値はbool型であるPFのポイントを説明し; *それはフロントPFへのポインタであること、あります:私たちは、上記のステートメントがあることを観察しました。

 そうでない場合は、「かっこ」、そしてPFは間違った意味、戻り値ブール*関数です。


 

まず、関数ポインタの使用:

  私たちが置か1. 値として使用されている関数名は、関数が自動的にポインタに変換されます。

  PF = lengthCompare; // PFポイントlengthCompare呼ばれる関数へ

       PF =&lengthCompare; //等価式と前記 "&" 記号が任意ADDRESS-あります

  2.私たちは、直接、事前にポインタ参照せずに、関数への関数呼び出しへのポインタを使用することができます。

  ブール値B1 = PF( "こんにちは"、 "goodbay"); //関数を呼び出すlengthCompare

  ブールB2 =(* PF)( "こんにちは"、 "goodbay"); //通話と同等の式

  ブールB3 = lengthCompare( "こんにちは"、 "goodbay"); //通話と同等の式

変換規則は、関数の種類(異なるタイプまたは異なる戻りパラメータ・タイプ)ポインタに異なる点の間に存在していません。


 II(重負荷機能)ポインター:

  関数ポインタポイントの定義を再ロードする場合、我々は、オーバーロードされた関数を使用すると、特定のタイプは正確にポインタがオーバーロードされた関数で一致している必要があります。

  空FF(int型*);

  空FF(unsigned int型);

  無効(* PF1)(unsigned int型)= FFの; //上記の2つのオーバーロードのため、PF1ポイントFF(unisgned)


 第三に、関数ポインタをパラメータとして使用されます。

  形参:

  ではないが、パラメータの関数としてではなく、パラメータとして配列が、パラメータとして使用される配列へのポインタであることができように、パラメータの関数へのポインタであってもよいです。

  useBiggerボイド(CONST文字列&S1、S2のCONST文字列&、BOOL PF(CONST文字列&、CONST文字列&)); //第三のパラメータはタイプの関数であり、それは自動的に関数に関数ポインタの型に変換される前頭

  useBiggerボイド(CONST文字列&S1、S2のCONST文字列&、BOOL(PF *)(CONST文字列&、CONST文字列&)); //明示的なパラメータが関数へのポインタとして定義されます

  引数:

  我々は直接参照形状の関数として使用することができ、この関数は、ポインタに自動的に変換されます。

  useBigger(S1、S2、lengthCompaer); //自動的に関数の関数へのポインタに変換されます

  上記の関数宣言を解決するために使用するエイリアスのタイプは、より長い質問です:

  typedefのBOOLのFunc(CONST文字列&、CONST文字列&); // funcはタイプの関数であります

  typedefのdecltype(lengthCompaer)FUNC2; //同等タイプ

  typedef BOOL(* FuncP)(定数文字列&、constの文字列&);関数へのポインタ//

  typydef decltype(lengthCompare)* FuncP2; //同等タイプ

  

  useBigger(定数文字列&、constの文字列&、機能)を無効; //のFuncコンパイラが自動的に種類の関数を指すようにポインタを変換します 

  空useBigger(定数文字列&、constの文字列&、FuncP2)。 

 


 

第四に、関数へのポインタを返します。

  そして、同様の配列ではなく、関数が返されますが、関数へのポインタを返すことができますが、私たちは関数の中で書かれなければならないことはポインタ型のフォームを返すものの、コンパイラが自動的に治療の種類に対応するポインタとして関数の型を返しません。

  F = INT(int型*、int)を使用して; // F型の関数ではないポインタであります

  PF = INT(*)(int型*、int)を使用して、// PFポインタ型

  PFのF1(INT); //正しい、PFは、関数へのポインタ、関数へのF1復帰ポインタがあります

  F * f1を(int型); //正しい、戻り値の型が指定されているディスプレイポインタ機能に

 

  

 

おすすめ

転載: www.cnblogs.com/ccpang/p/11408307.html