Funktsiooni C++ näited

Funktsiooni C Naited



C++ klassi, mis töötab nagu funktsioon, nimetatakse funktoriks. Funktorite kutsumiseks kasutatakse identset vana funktsioonikutse süntaksit. Loome funktsionaalse genereerimiseks objekti, mis koormab operaatorit () üle. Võime ka öelda, et objekte, mida võib tõlgendada kas funktsiooni või funktsiooni osutina, nimetatakse funktoriteks. Funktsionaalsete efektide modelleerimisel, kasutades parameetriliste andmetüüpide väärtusi, on “funktorid” äärmiselt mugavad. Selles artiklis uuritakse funktori kontseptsiooni koos C++ koodidega üksikasjalikult.

Näide 1:

'iostream' on päisefail, mille me siia lisame, kuna peame kasutama selles päisefailis deklareeritud funktsioone. Päisefail 'iostream' sisaldab funktsiooni deklaratsiooni. Siia lisatakse ka nimeruum 'std'. Seejärel genereerime klassi nimega 'FunctorClass'. Selle alla tippime „public”, mis on siin avalik konstruktor, ja asetame funktsiooni „operaator()”. Seejärel asetame lause, mille tahame ekraanile renderdada, lausesse 'cout'.

Pärast seda kutsume funktsiooni 'main()' ja loome seejärel 'FunctorClassi' objekti nimega 'my_functor'. Siin kutsume funktsiooni 'my_functor()', nii et see kuvab avalduse, mille lisasime funktsiooni 'operator()' alla.







Kood 1:



#include
kasutades nimeruum std ;
klass Funktoriklass {
avalik :
tühine operaator ( ) ( ) {
cout << 'Operatsioon kutsutakse siia' ;
}
} ;
int peamine ( ) {
Funktoriklass minu_funktsioon ;
minu_funktsioon ( ) ;

tagasi 0 ;
}

Väljund:



Rida, mille lisasime funktsiooni 'FunctorClass' funktsiooni 'operator()', kuvatakse siin, kasutades funtoriobjekti 'my_functor'.





Näide 2:

Lisame siia päisefaili „iostream”, kuna osa funktsioonide deklaratsioonist sisaldub päisefailis „iostream”. Sisestatakse ka nimeruum 'std'. Järgmisena loome klassi nimega “SquareClass”.



Selle alla tippime „public”, mis on avalik konstrueerija, ja paigutame selle alla andmetüübi „int” funktsiooni „operaator()”. Edastame andmetüübi 'int' muutuja 'val' sellele funktsioonile 'operator()'. See funktsioon tagastab korrutamistulemuse, kuna sisestasime funktsiooni 'operator()' alla funktsiooni 'tagasi()' 'val * val'.

Nüüd kutsutakse siin funktsioon 'main()'. Seejärel luuakse siin objekt klassi “SquareFunctor” nimega “s_functor”. Seejärel kasutame 'cout', mis aitab teabe esitamisel. Pärast seda kutsume siin objekti 'my_functor()' nagu funktsiooni ja see tagastab korrutamistulemuse '5 * 5', kuna lisasime selle kutsumise ajal parameetriks '5'.

Kood 2:

#include
kasutades nimeruum std ;
klass SquareClass {
avalik :
int operaator ( ) ( int val ) {
tagasi ( val * val ) ;
}
} ;
int peamine ( ) {
SquareClassi s_functor ;
cout << 'Antud väärtuse ruut on' << endl ;
cout << s_funktsioon ( 5 ) ;

tagasi 0 ;
}

Väljund:

Väljundi saame pärast klassi „SqaureClass” objekti „my_functor” väljakutsumist nagu funktsiooni „my_functor()” ja seejärel „5” edastamist. Saame '25' arvu '5' ruuduna.

Näide 3:

Päisefail 'iostream' on siia lisatud, kuna see sisaldab funktsiooni deklaratsiooni ja nimeruum 'std' võetakse kasutusele hiljem. Seejärel tehakse klass “ProductFunctor”. Selle alla kirjutatakse avalik konstruktor 'public' ja selle alla on paigutatud andmetüübi 'int' funktsioon 'operator()'. Alistame selle funktsiooni siin ja edastame sellele kaks parameetrit: “int var1” ja “int var2”.

Seejärel kasutame selle all olevat 'return' ja korrutame mõlemad muutujad, mis tagastavad mõlema arvu 'var1 * var2' korrutamistulemuse. Seejärel kutsutakse siin välja funktsioon 'main()' ja genereerime klassi objekti 'ProductFunctor' klassi nimega 'P_functor'. Seejärel initsialiseerime uue muutuja nimega 'pro_result' ja määrame objekti 'P_functor' funktsiooniks 'P_functor()' pärast selle kutsumist.

Parameetriteks anname '28' ja '63'. See korrutab mõlemad väärtused ja salvestab tulemuse muutujas 'pro_result', mille prindime selle alla, kasutades 'cout' ja edastades selles 'pro_result'.

Kood 3:

#include
kasutades nimeruum std ;
klass ProductFunctor {
avalik :
int operaator ( ) ( int var1, int var2 ) {
tagasi var1 * var2 ;
}
} ;
int peamine ( ) {
ProductFunctor P_functor ;
int prod_result = P_funktsioon ( 28 , 63 ) ;
cout << 'Toode on:' << prod_result << endl ;
tagasi 0 ;
}

Väljund:

Saame toote pärast seda, kui kutsume objekti 'P_functor' funktsioonina 'P_functor()' ja edastame sellele väärtused. Nende väärtuste korrutis on '1764'.

Näide 4:

Sel juhul luuakse 'GreetingFunctorClass'. Seejärel sisestame konstruktori 'avalik' ja alistame selle 'avaliku' konstruktori funktsiooni 'operator()'. Kirjutame 'Tere! Olen siin C++ programmeerija” pärast seda, kui panin funktsiooni “operator()” alla “cout”.

Nüüd kutsume me 'main()'. Loome siin 'GreetingFunctorClass' objektiks 'g_functor' ja seejärel kutsume selle objekti 'g_functor' funktsiooniks 'g_functor()'. See annab tulemuse, mille lisasime funktsiooni „operaator()”, alistades selle.

Kood 4:

#include
kasutades nimeruum std ;
kasutades nimeruum std ;
klass TervitusFunctorClass {
avalik :
tühine operaator ( ) ( ) {
cout << 'Tere! Olen siin C++ programmeerija' ;
}
} ;
int peamine ( ) {
TervitusFunctorClass g_functor ;
g_funktsioon ( ) ;
tagasi 0 ;
}

Väljund:

Siin võime märgata, et lause, mille lisasime, kui alistasime oma koodis funktsiooni „operator()”, kuvatakse siin, kuna me nimetame klassiobjekti funktsioonina.

Näide 5:

Seekord on lisatud 'bits/stdc++.h', kuna see sisaldab kõiki vajalikke funktsioonide deklaratsioone. Seejärel asetatakse siia nimeruum 'std'. Klass, mille me siin loome, on klass 'incrementFunctor'. Seejärel loome 'privaatse' konstruktori ja initsialiseerime muutuja 'int_num' andmetüübiga 'int'.

Selle 'avaliku' konstruktori alla asetame 'incrementFunctor' ja edastame selle sees 'int n1'. Seejärel tippime pärast ':' asetamist 'int_num(n1)'. Seejärel alistame funktsiooni, mis on andmetüübi 'int' funktsioon 'operator()', ja deklareerime siin 'int arrOfNum'. Seejärel kasutame 'tagasi' ja sisestame 'int_num + arrOfNum'. Nüüd suurendab see 'arrOfNum' väärtusi, lisab neile väärtuse 'int_num' ja tagastab need siia.

Pärast 'main()' käivitamist initsialiseerime 'arrOfNum' ja määrame siin erinevad täisarvu väärtused. Seejärel initsialiseeritakse muutuja 'n1', kuhu lisame funktsiooni 'sizeof', näiteks 'sizeof(arrOfNum)/sizeof(arrOfNum[0])'. Pärast seda initsialiseeritakse 'additionNumber' numbriga '3'. Nüüd kasutame funktsiooni 'transform()'. See 'transform()' on sama, mis klassi 'increamentFunctor' objekti loomine ja seejärel selle objekti kutsumine. Pärast seda kasutame tsüklit 'for' ja seejärel 'arrOfNum[i]'.

Kood 5:

#include
kasutades nimeruum std ;
klass inkrementFunctor
{
privaatne :
int int_num ;
avalik :
inkrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operaator ( ) ( int arrOfNum ) konst {
tagasi int_num + arrOfNum ;
}
} ;
int peamine ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = suurus ( arrOfNum ) / suurus ( arrOfNum [ 0 ] ) ;
int lisanumber = 3 ;
teisendada ( arrOfNum, arrOfNum + n1, arrOfNum, incrementFunctor ( lisanumber ) ) ;

jaoks ( int i = 0 ; i < n1 ; i ++ )
cout << arrOfNum [ i ] << ' ' ;
}

Väljund:

Siin on näidatud koodi tulemus, milles 'incrementFunctor' on funktsioonina kasutatav 'Functor'.

Näide 6:

Selles koodis kasutame eelmääratletud 'suuremat' funktsionääri. Siia lisame neli erinevat päisefaili, nagu me neid oma koodis nõuame, kuna nendes on deklareeritud funktsioonid või meetodid, mida meie koodis vajame. Seejärel, pärast 'std' lisamist ja seejärel 'main()' kutsumist, initsialiseerime 'myIntegerVector' vektori. Lisame sellesse vektorisse mõned sortimata väärtused. Selle all rakendame nende vektoriväärtuste sortimiseks funktsiooni 'sort'.

Kui kasutame seda funktsiooni, sorteerib see väärtused kasvavas järjekorras. Kuid me kasutame siin 'suuremat', mis on C++ eelmääratletud funktsioon, mis annab sortimise tulemuse kahanevalt. Pärast seda kuvame sorditud väärtused silmuse 'for' ja seejärel 'cout' abil.

Kood 6:

#include
#include
#include
#include
kasutades nimeruum std ;

int peamine ( ) {
vektor < int > myIntegerVector = { 13 , kakskümmend üks , 19 , 44 , 32 , 42 , 9 , 6 } ;
sorteerida ( myIntegerVector. alustada ( ) , myIntegerVector. lõpp ( ) , suurem < int > ( ) ) ;
jaoks ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
tagasi 0 ;
}

Väljund:

Kõik vektori väärtused sorteeritakse kahanevalt C++ eelmääratletud funktori abil, mis on 'suurem' funktor ja selle definitsioon on saadaval 'funktsionaalses' päisefailis.

Järeldus

Selles artiklis uuritakse põhjalikult funktsionaalse C++ kontseptsiooni. Uurisime, et objekti saab käivitada funktsioonina, et koormata funktsiooni nimega 'operator()'. Seda tuntakse funktorina. „Operaatori()” ülekoormamiseks peab olema ette nähtud avalik juurdepääs. Illustreerisime erinevaid näiteid, milles kasutasime oma koodis 'funktoreid' ja eelmääratletud 'funktoreid'.