Függvény C++ Példák

Fuggveny C Peldak



A függvényként működő C++ osztályt funktornak nevezzük. Az azonos régi függvényhívás szintaxist használják a függvények meghívására. Létrehozunk egy objektumot, amely túlterheli az „operator()”-t, hogy létrehozzon egy funktort. Azt is mondhatjuk, hogy azokat az objektumokat, amelyek akár függvényként, akár függvénymutatóként értelmezhetők, funktoroknak nevezzük. A funkcionális hatások paraméteres adattípusok értékeivel történő modellezésekor a „funktorok” rendkívül kényelmesek. Ebben a cikkben a funktor fogalmát a C++ kódokkal együtt részletesen tanulmányozzuk.

1. példa:

Az „iostream” az a fejlécfájl, amelyet ide sorolunk, mert használnunk kell a fejlécfájlban deklarált függvényeket. Az „iostream” fejlécfájl funkciódeklarációt tartalmaz. Az „std” névtér is hozzáadásra kerül. Ezután létrehozunk egy „FunctorClass” nevű osztályt. Ez alá írjuk be a „public”, ami a nyilvános konstruktor, és helyezzük el az „operator()” függvényt. Ezután a „cout” utasításban elhelyezünk egy mondatot, amelyet a képernyőn szeretnénk megjeleníteni.

Ezután meghívjuk a „main()” függvényt, majd létrehozzuk a „FunctorClass” objektumát „my_functor” néven. Itt a „my_functor()” függvényt hívjuk meg, így megjeleníti azt az utasítást, amelyet az „operator()” függvény alá adtunk.







1. kód:



#include
segítségével névtér std ;
osztály FunctorClass {
nyilvános :
üres operátor ( ) ( ) {
cout << 'Itt hívják a hadműveletet' ;
}
} ;
int fő- ( ) {
FunctorClass my_functor ;
my_functor ( ) ;

Visszatérés 0 ;
}

Kimenet:



A „FunctorClass” „operator()” függvényében hozzáadott sor itt jelenik meg a „my_functor” functor objektum használatával.





2. példa:

Ide soroljuk az „iostream” fejlécfájlt, mert az „iostream” fejlécfájl néhány függvénydeklarációt tartalmaz. Az „std” névteret is beszúrja. Ezután létrehozunk egy „SquareClass” nevű osztályt.



Ez alá írjuk be a „public”, ami a nyilvános konstruktor, és az „int” adattípus „operator()” függvényét helyezzük el alá. Ennek az „operator()” függvénynek adjuk át az „int” adattípus „val” változóját. Ez a függvény a szorzás eredményét adja vissza, mivel a „val * val” értéket beszúrtuk a „return()” függvénybe az „operator()” függvény alá.

Most itt a „main()” függvényt hívjuk meg. Ezután az objektum itt jön létre a „SquareFunctor” osztály „s_functor” nevével. Ezután a „cout”-ot használjuk, amely segít az információ megjelenítésében. Ezek után a „my_functor()” objektumot itt függvényként hívjuk meg, és az „5 * 5” szorzási eredményt adja vissza, mivel hívásakor az „5” paramétert adtuk hozzá.

2. kód:

#include
segítségével névtér std ;
osztály SquareClass {
nyilvános :
int operátor ( ) ( int val ) {
Visszatérés ( val * val ) ;
}
} ;
int fő- ( ) {
SquareClass s_functor ;
cout << 'Az adott érték négyzete' << endl ;
cout << s_függvény ( 5 ) ;

Visszatérés 0 ;
}

Kimenet:

A kimenetet a „SqaureClass” osztály „my_functor” objektumának meghívása után kapjuk meg, például a „my_functor()” függvényt, majd átadjuk az „5”-öt. A „25”-öt kapjuk az „5” szám négyzeteként.

3. példa:

Az „iostream” fejlécfájl azért szerepel itt, mert tartalmaz egy függvénydeklarációt, és az „std” névteret ezt követően vezetjük be. Ezután elkészül a „ProductFunctor” osztály. A nyilvános konstruktor, a „public”, alatta, az „int” adattípus „operator()” függvénye pedig alatta található. Itt felülírjuk ezt a függvényt, és két paramétert adunk át neki: „int var1” és „int var2”.

Ezután használjuk a „return” értéket ez alatt, és megszorozzuk mindkét változót, amely mindkét szám „var1 * var2” szorzási eredményét adja vissza. Ezután itt a „main()” függvényt hívjuk meg, és a „ProductFunctor” osztály „P_functor” nevű osztályobjektumát generáljuk. Ezután inicializálunk egy új változót „pro_result” néven, és a „P_functor” objektumot „P_functor()” függvényként rendeljük hozzá, miután meghívtuk.

Paraméterként a „28” és „63” értéket adjuk meg. Ez megszorozza mindkét értéket, és elmenti az eredményt a „pro_result” változóba, amelyet ez alá nyomtatunk a „cout” használatával és a „pro_result” átadásával.

3. kód:

#include
segítségével névtér std ;
osztály ProductFunctor {
nyilvános :
int operátor ( ) ( int var1, int var2 ) {
Visszatérés var1 * var2 ;
}
} ;
int fő- ( ) {
ProductFunctor P_functor ;
int prod_result = P_függvény ( 28 , 63 ) ;
cout << 'A termék:' << prod_result << endl ;
Visszatérés 0 ;
}

Kimenet:

A szorzatot a „P_functor” objektum „P_functor()” függvényként történő meghívása és az értékek átadása után kapjuk meg. Ezen értékek szorzata „1764”.

4. példa:

Ebben az esetben a „GreetingFunctorClass” jön létre. Ezután beillesztjük a „public” konstruktort, és felülírjuk az „operator()” függvényt ebben a „nyilvános” konstruktorban. Beírjuk a „Hello! C++ programozó vagyok itt”, miután az „operator()” függvény alá helyeztem a „cout”-ot.

Mostantól a „main()”-ot hívjuk. Itt létrehozzuk a „g_functor”-t a „GreetingFunctorClass” objektumaként, majd ezt a „g_functor” objektumot „g_functor()” függvénynek hívjuk. Ez azt az eredményt adja, amelyet hozzáadtunk az „operator()” függvényhez, miközben felülírtuk azt.

4. kód:

#include
segítségével névtér std ;
segítségével névtér std ;
osztály ÜdvözletFunctorClass {
nyilvános :
üres operátor ( ) ( ) {
cout << 'Szia! C++ programozó vagyok itt' ;
}
} ;
int fő- ( ) {
GreetingFunctorClass g_functor ;
g_függvény ( ) ;
Visszatérés 0 ;
}

Kimenet:

Itt észrevehetjük, hogy az az utasítás, amelyet akkor adtunk hozzá, amikor felülírtuk az „operator()” függvényt a kódunkban, itt jelenik meg, mivel az osztályobjektumot függvényként hívjuk.

5. példa:

Ezúttal a „bits/stdc++.h” is szerepel, mivel minden szükséges függvénydeklarációt tartalmaz. Ezután az „std” névtér kerül ide. Az itt létrehozott osztály az „incrementFunctor” osztály. Ezután létrehozunk egy „privát” konstruktort, és inicializáljuk az „int_num” változót az „int” adattípussal.

Ez alatt, a „public” konstruktor alatt helyezzük el az „incrementFunctor”-t, és átadjuk benne az „int n1”-et. Ezután beírjuk az „int_num(n1)” parancsot a „:” beírása után. Ezután felülírjuk az „int” adattípus „operator()” függvényét, és itt deklaráljuk az „int arrOfNum”-ot. Ezután a „return”-t használjuk, és beillesztjük az „int_num + arrOfNum” parancsot. Most ez növeli az „arrOfNum” értékeit, hozzáadja az „int_num” értéket, és visszaadja őket ide.

A „main()” meghívása után inicializáljuk az „arrOfNum”-t, és különböző egész értékeket rendelünk hozzá. Ezután az „n1” változó inicializálódik, ahol hozzáadjuk a „sizeof” függvényt, például a „sizeof(arrOfNum)/sizeof(arrOfNum[0])”. Ezt követően az „additionNumber” inicializálása „3”-mal történik. Most a „transform()” függvényt használjuk. Ez a „transform()” ugyanaz, mint az „increamentFunctor” osztály objektumának létrehozása, majd az objektum meghívása. Ezt követően a „for” ciklust használjuk, majd „kivágjuk” az „arrOfNum[i]-t”.

5. kód:

#include
segítségével névtér std ;
osztály incrementFunctor
{
magán :
int int_num ;
nyilvános :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operátor ( ) ( int arrOfNum ) const {
Visszatérés int_num + arrOfNum ;
}
} ;
int fő- ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = mérete ( arrOfNum ) / mérete ( arrOfNum [ 0 ] ) ;
int kiegészítési szám = 3 ;
átalakítani ( arrOfNum, arrOfNum + n1, arrOfNum, incrementFunctor ( kiegészítési szám ) ) ;

számára ( int én = 0 ; én < n1 ; én ++ )
cout << arrOfNum [ én ] << ' ' ;
}

Kimenet:

A kód eredménye itt látható, amelyben az „incrementFunctor” a függvényként használt „Functor”.

6. példa:

Ebben a kódban az előre meghatározott „nagyobb” függvényt használjuk. Itt négy különböző fejlécfájlt adunk meg, ahogyan azt a kódunkban megköveteljük, mert a kódunkban szükséges függvények vagy metódusok ezekben vannak deklarálva. Ezután az „std” hozzáadása, majd a „main()” meghívása után inicializáljuk a „myIntegerVector” vektort. Ebbe a vektorba beszúrunk néhány rendezetlen értéket. Ez alatt a „rendezés” függvényt alkalmazzuk ezen vektorértékek rendezésére.

Amikor ezt a függvényt használjuk, az értékeket növekvő sorrendbe rendezi. De itt a „nagyobb”-t használjuk, ami a C++ előre definiált függvénye, amely csökkenő módon adja meg a rendezés eredményét. Ezt követően a 'for' ciklus, majd a 'cout' segítségével megjelenítjük a rendezett értékeket.

6. kód:

#include
#include
#include
#include
segítségével névtér std ;

int fő- ( ) {
vektor < int > myIntegerVector = { 13 , huszonegy , 19 , 44 , 32 , 42 , 9 , 6 } ;
fajta ( myIntegerVector. kezdődik ( ) , myIntegerVector. vége ( ) , nagyobb < int > ( ) ) ;
számára ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
Visszatérés 0 ;
}

Kimenet:

A vektor összes értéke csökkenő sorrendben van rendezve a C++-ban előre definiált funktor segítségével, amely a „nagyobb” függvény, és a definíciója elérhető a „funkcionális” fejlécfájlban.

Következtetés

A „C++ funktor” fogalmát ez a cikk alaposan megvizsgálja. Megvizsgáltuk, hogy egy objektum függvényként hívható meg az „operator()” nevű függvény túlterhelésére. Ezt funktornak nevezik. Nyilvános hozzáférést kell biztosítani az „üzemeltető()” túlterheléséhez, hogy rendeltetésszerűen lehessen használni. Különböző példákat mutattunk be, amelyekben felhasználtuk a kódunkban szereplő „funktorokat” és az előre definiált „funktort”.