例 1:
「iostream」は、このヘッダー ファイルで宣言されている関数を利用する必要があるため、ここに含めるヘッダー ファイルです。 「iostream」ヘッダー ファイルには関数宣言が含まれています。 「std」名前空間もここに追加されます。次に、「FunctorClass」というクラスを生成します。その下に、ここではパブリック コンストラクターである「public」と入力し、「operator()」関数を配置します。次に、画面上に表示したい文を「cout」ステートメントに配置します。
この後、「main()」関数を呼び出し、「my_functor」という名前で「FunctorClass」のオブジェクトを作成します。ここでは、「my_functor()」関数を呼び出して、「operator()」関数の下に追加したステートメントを表示します。
コード 1:
#include
を使用して 名前空間 標準 ;
クラス ファンクタークラス {
公共 :
空所 オペレーター ( ) ( ) {
コート << 「ここに作戦が呼び出されます」 ;
}
} ;
整数 主要 ( ) {
FunctorClass my_functor ;
my_functor ( ) ;
戻る 0 ;
}
出力:
ここでは「FunctorClass」の「operator()」関数内に追加した行を「my_functor」ファンクターオブジェクトを利用して表示しています。
例 2:
一部の関数宣言が「iostream」ヘッダー ファイルに含まれているため、ここに「iostream」ヘッダー ファイルを含めます。 「std」名前空間も挿入されます。次に、「SquareClass」という名前のクラスを作成します。
その下に、パブリック コンストラクターである「public」と入力し、その下に「int」データ型の「operator()」関数を配置します。 「int」データ型の「val」変数をこの「operator()」関数に渡します。この関数は、「operator()」関数の下の「return()」関数に「val * val」を挿入したため、乗算結果を返します。
ここで「main()」関数が呼び出されます。すると、ここでは「SquareFunctor」クラスの「s_functor」という名前でオブジェクトが作成されます。次に、情報のレンダリングを支援する「cout」を利用します。この後、ここで「my_functor()」オブジェクトを関数のように呼び出します。呼び出し時にパラメータとして「5」を追加したため、乗算結果「5 * 5」が返されます。
コード 2:
#includeを使用して 名前空間 標準 ;
クラス スクエアクラス {
公共 :
整数 オペレーター ( ) ( 整数 ヴァル ) {
戻る ( ヴァル * ヴァル ) ;
}
} ;
整数 主要 ( ) {
SquareClass s_functor ;
コート << '指定された値の 2 乗は ' << 終わり ;
コート << s_function ( 5 ) ;
戻る 0 ;
}
出力:
「SqaureClass」クラスの「my_functor」オブジェクトを「my_functor()」関数のように呼び出して「5」を渡すと、出力が得られます。数字「5」の二乗として「25」が得られます。
例 3:
「iostream」ヘッダー ファイルは関数宣言が含まれているためここに含まれており、その後「std」名前空間が導入されます。次に、「ProductFunctor」クラスが作成されます。パブリック コンストラクター「public」がその下に入力され、「int」データ型の「operator()」関数がその下に配置されます。ここでこの関数をオーバーライドし、2 つのパラメーター「int var1」と「int var2」を渡します。
次に、この下の「return」を利用して両方の変数を乗算し、両方の数値の乗算結果「var1 * var2」を返します。次に、ここで「main()」関数が呼び出され、「ProductFunctor」クラスの「P_functor」という名前のクラス オブジェクトが生成されます。次に、「pro_result」という名前の新しい変数を初期化し、呼び出し後に「P_functor」オブジェクトを「P_functor()」関数として割り当てます。
「28」と「63」をパラメータとして渡します。これにより、両方の値が乗算され、その結果が「pro_result」変数に保存されます。この変数では、「cout」を使用して「pro_result」を渡し、この下に出力します。
コード 3:
#includeを使用して 名前空間 標準 ;
クラス プロダクトファンクター {
公共 :
整数 オペレーター ( ) ( 整数 var1、 整数 var2 ) {
戻る var1 * var2 ;
}
} ;
整数 主要 ( ) {
ProductFunctor P_ファンクター ;
整数 生産結果 = P_関数 ( 28 、 63 ) ;
コート << 「製品は次のとおりです。」 << 生産結果 << 終わり ;
戻る 0 ;
}
出力:
「P_functor」オブジェクトを「P_functor()」関数として呼び出し、それに値を渡すと、積が得られます。これらの値の積は「1764」です。
例 4:
このインスタンスでは「GreetingFunctorClass」が生成されます。次に、「public」コンストラクターを挿入し、この「public」コンストラクター内の「operator()」関数をオーバーライドします。 「こんにちは!」と入力します。 「operator()」関数の下に「cout」を配置した後、「私は C++ プログラマーです」と入力します。
ここからは「main()」を呼び出します。ここでは「GreetingFunctorClass」のオブジェクトとして「g_functor」を作成し、この「g_functor」オブジェクトを「g_functor()」関数として呼び出します。これにより、「operator()」関数をオーバーライドするときに追加した結果が得られます。
コード 4:
#includeを使用して 名前空間 標準 ;
を使用して 名前空間 標準 ;
クラス 挨拶ファンクタークラス {
公共 :
空所 オペレーター ( ) ( ) {
コート << 「こんにちは!私はここの C++ プログラマーです」 ;
}
} ;
整数 主要 ( ) {
GreetingFunctorClass g_functor ;
g_function ( ) ;
戻る 0 ;
}
出力:
ここで、クラス オブジェクトを関数のように呼び出すと、コード内の「operator()」関数をオーバーライドしたときに追加したステートメントがここに表示されることに気づくかもしれません。
例 5:
今回は「bits/stdc++.h」に必要な関数宣言がすべて含まれているので含めます。そして、「std」名前空間がここに配置されます。ここで作成するクラスは「incrementFunctor」クラスです。次に、「プライベート」コンストラクターを作成し、「int_num」変数を「int」データ型で初期化します。
この「public」コンストラクターの下に「incrementFunctor」を配置し、その中に「int n1」を渡します。次に、「:」を配置した後に「int_num(n1)」と入力します。次に、「int」データ型の「operator()」関数をオーバーライドし、ここで「int arrOfNum」を宣言します。次に、「return」を使用して「int_num + arrOfNum」を挿入します。これで、「arrOfNum」の値がインクリメントされ、「int_num」の値が追加されて、ここに返されます。
「main()」を呼び出した後、「arrOfNum」を初期化し、ここで別の整数値を割り当てます。次に、「sizeof(arrOfNum)/sizeof(arrOfNum[0])」のような「sizeof」関数を追加して、「n1」変数が初期化されます。その後、「additionNumber」は「3」で初期化されます。ここでは「transform()」関数を利用します。この「transform()」は、「increammentFunctor」クラスのオブジェクトを作成し、そのオブジェクトを呼び出すことと同じです。この後、「for」ループを使用して、「arrOfNum[i]」を「cout」します。
コード5:
#includeを使用して 名前空間 標準 ;
クラス インクリメントファンクター
{
プライベート :
整数 int_num ;
公共 :
インクリメントファンクター ( 整数 n1 ) : int_num ( n1 ) { }
整数 オペレーター ( ) ( 整数 arrOfNum ) 定数 {
戻る int_num + arrOfNum ;
}
} ;
整数 主要 ( )
{
整数 arrOfNum [ 】 = { 6 、 3 、 2 、 1 、 9 、 0 、 8 } ;
整数 n1 = のサイズ ( arrOfNum ) / のサイズ ( arrOfNum [ 0 】 ) ;
整数 加算番号 = 3 ;
変身 ( arrOfNum、arrOfNum + n1、arrOfNum、incrementFunctor ( 加算番号 ) ) ;
のために ( 整数 私 = 0 ; 私 < n1 ; 私 ++ )
コート << arrOfNum [ 私 】 << 「」 ;
}
出力:
コードの結果がここに示されています。ここでは、「incrementFunctor」が関数として利用される「Functor」です。
例 6:
このコードでは、事前定義された「より大きな」ファンクターを利用します。ここでは、コード内で必要な関数またはメソッドがヘッダー ファイル内で宣言されているため、コード内で必要な 4 つの異なるヘッダー ファイルを含めます。次に、「std」を追加して「main()」を呼び出した後、「myIntegerVector」ベクトルを初期化します。このベクトルにいくつかの未ソートの値を挿入します。この下では、「sort」関数を適用してこれらのベクトル値を並べ替えます。
この関数を使用すると、値が昇順に並べ替えられます。ただし、ここでは「greater」を利用します。これは、降順でソートの結果を与える C++ の事前定義関数です。この後、「for」ループを使用してソートされた値を表示し、次に「cout」を使用します。
コード6:
#include#include <アルゴリズム>
#include <ベクター>
#include <機能>
を使用して 名前空間 標準 ;
整数 主要 ( ) {
ベクター < 整数 > myIntegerVector = { 13 、 21 、 19 、 44 、 32 、 42 、 9 、 6 } ;
選別 ( myIntegerVector。 始める ( ) 、myIntegerVector。 終わり ( ) 、より大きい < 整数 > ( ) ) ;
のために ( 整数 vec_num : myIntegerVector ) {
コート << vec_num << 「」 ;
}
戻る 0 ;
}
出力:
ベクトルのすべての値は、C++ の事前定義されたファンクター (「大きい」ファンクター) を使用して降順にソートされます。その定義は「関数型」ヘッダー ファイルで利用できます。
結論
この記事では、「ファンクター C++」の概念について詳しく説明します。私たちは、オブジェクトを関数として呼び出して、「operator()」と呼ばれる関数をオーバーロードできることを研究しました。これはファンクターとして知られています。 「operator()」のオーバーロードを意図したとおりに利用するには、パブリック アクセスを提供する必要があります。コード内で「ファンクター」と事前定義された「ファンクター」を利用するさまざまな例を示しました。