Primeri funkcij C++

Primeri Funkcij C



Razred C++, ki deluje kot funkcija, se imenuje funktor. Identična stara sintaksa klica funkcij se uporablja za priklic funktorjev. Ustvarimo objekt, ki preobremeni 'operator()', da ustvari funktor. Lahko tudi rečemo, da se objekti, ki jih je mogoče interpretirati kot funkcija ali funkcijski kazalec, imenujejo funktorji. Pri modeliranju funkcijskih učinkov z uporabo vrednosti parametričnih podatkovnih tipov so »funktorji« izjemno priročni. V tem članku bo koncept funktorja podrobno preučen skupaj s kodami C++.

Primer 1:

»iostream« je datoteka glave, ki jo vključimo sem, ker moramo uporabiti funkcije, ki so deklarirane v tej datoteki glave. Datoteka glave »iostream« vsebuje deklaracijo funkcije. Tukaj je dodan tudi imenski prostor »std«. Nato ustvarimo razred, imenovan 'FunctorClass'. Pod tem vnesemo 'public', ki je tukaj javni konstruktor, in postavimo funkcijo 'operator()'. Nato v stavek »cout« postavimo stavek, ki ga želimo upodobiti na zaslonu.

Po tem pokličemo funkcijo “main()” in nato ustvarimo objekt “FunctorClass” z imenom “my_functor”. Tukaj pokličemo funkcijo 'my_functor()', tako da prikaže stavek, ki smo ga dodali pod funkcijo 'operator()'.







Koda 1:



#include
uporabo imenski prostor std ;
razred FunctorClass {
javnosti :
praznina operater ( ) ( ) {
cout << 'Operacija se imenuje tukaj' ;
}
} ;
int glavni ( ) {
FunctorClass moj_functor ;
moj_funktor ( ) ;

vrnitev 0 ;
}

Izhod:



Vrstica, ki smo jo dodali v funkciji »operator()« razreda »FunctorClass«, je tukaj prikazana z uporabo predmeta funktorja »my_functor«.





Primer 2:

Sem vključimo datoteko glave »iostream«, ker je v datoteki glave »iostream« nekaj deklaracij funkcij. Vstavljen je tudi imenski prostor »std«. Nato ustvarimo razred z imenom 'SquareClass'.



Pod tem vtipkamo »public«, ki je javni konstruktor, in pod njim postavimo funkcijo »operator()« podatkovnega tipa »int«. Tej funkciji »operator()« posredujemo spremenljivko »val« podatkovnega tipa »int«. Ta funkcija vrne rezultat množenja, ko smo vstavili 'val * val' v funkcijo 'return()' pod funkcijo 'operator()'.

Zdaj se tukaj kliče funkcija »main()«. Nato je tukaj ustvarjen predmet z imenom »s_functor« razreda »SquareFunctor«. Nato uporabimo »cout«, ki pomaga pri upodabljanju informacij. Po tem pokličemo objekt »my_functor()« tukaj kot funkcijo in vrne rezultat množenja »5 * 5«, saj smo med klicem dodali »5« kot parameter.

Koda 2:

#include
uporabo imenski prostor std ;
razred SquareClass {
javnosti :
int operater ( ) ( int val ) {
vrnitev ( val * val ) ;
}
} ;
int glavni ( ) {
SquareClass s_functor ;
cout << 'Kvadrat dane vrednosti je ' << konec ;
cout << s_funkcija ( 5 ) ;

vrnitev 0 ;
}

Izhod:

Izhod dobimo po klicu predmeta »my_functor« razreda »SqaureClass«, kot je funkcija »my_functor()«, in nato posredovanju »5«. Dobimo '25' kot kvadrat števila '5'.

Primer 3:

Datoteka glave »iostream« je vključena tukaj, ker vsebuje deklaracijo funkcije, nato pa je uveden imenski prostor »std«. Nato je izdelan razred »ProductFunctor«. Javni konstruktor, »public«, je vnesen pod njim, funkcija »operator()« podatkovnega tipa »int« pa je nameščena pod njim. Tukaj preglasimo to funkcijo in vanjo posredujemo dva parametra: »int var1« in »int var2«.

Nato uporabimo 'return' pod tem in pomnožimo obe spremenljivki, ki vrneta rezultat množenja obeh števil 'var1 * var2'. Tu se nato pokliče funkcija »main()« in ustvarimo objekt razreda z imenom »P_functor« razreda »ProductFunctor«. Nato inicializiramo novo spremenljivko z imenom 'pro_result' in dodelimo objekt 'P_functor' kot funkcijo 'P_functor()', potem ko jo prikličemo.

Kot parameter posredujemo »28« in »63«. To bo pomnožilo obe vrednosti in shranilo rezultat v spremenljivko »pro_result«, ki jo natisnemo pod to z uporabo »cout« in vanjo posredujemo »pro_result«.

Koda 3:

#include
uporabo imenski prostor std ;
razred ProductFunctor {
javnosti :
int operater ( ) ( int var1, int var2 ) {
vrnitev var1 * var2 ;
}
} ;
int glavni ( ) {
ProductFunctor P_functor ;
int proizvod_rezultat = P_funkcija ( 28 , 63 ) ;
cout << 'Izdelek je:' << proizvod_rezultat << konec ;
vrnitev 0 ;
}

Izhod:

Produkt dobimo, ko pokličemo objekt »P_functor« kot funkcijo »P_functor()« in mu posredujemo vrednosti. Zmnožek teh vrednosti je '1764'.

Primer 4:

V tem primeru je ustvarjen »GreetingFunctorClass«. Nato vstavimo 'javni' konstruktor in preglasimo funkcijo 'operator()' v tem 'javnem' konstruktorju. Vpišemo »Pozdravljeni! Tukaj sem programer C++«, potem ko sem pod funkcijo »operator()« postavil »cout«.

Zdaj naprej kličemo 'main()'. Tu ustvarimo »g_functor« kot objekt »GreetingFunctorClass« in nato pokličemo ta objekt »g_functor« kot funkcijo »g_functor()«. To daje rezultat, ki smo ga dodali v funkcijo 'operator()', medtem ko jo preglasimo.

Koda 4:

#include
uporabo imenski prostor std ;
uporabo imenski prostor std ;
razred Pozdrav FunctorClass {
javnosti :
praznina operater ( ) ( ) {
cout << 'Pozdravljeni! Tukaj sem programer C++' ;
}
} ;
int glavni ( ) {
GreetingFunctorClass g_functor ;
g_funkcija ( ) ;
vrnitev 0 ;
}

Izhod:

Tukaj lahko opazimo, da je stavek, ki smo ga dodali, ko smo razveljavili funkcijo »operator()« v naši kodi, prikazan tukaj, ko kličemo objekt razreda kot funkcijo.

Primer 5:

»bits/stdc++.h« je tokrat vključen, saj vsebuje vse potrebne deklaracije funkcij. Nato se tukaj postavi imenski prostor »std«. Razred, ki ga ustvarimo tukaj, je razred »incrementFunctor«. Nato ustvarimo »zasebni« konstruktor in inicializiramo spremenljivko »int_num« s podatkovnim tipom »int«.

Pod tem, 'javnim' konstruktorjem, postavimo 'incrementFunctor' in vanj posredujemo 'int n1'. Nato vnesemo »int_num(n1)« po vstavitvi »:«. Nato preglasimo funkcijo, ki je funkcija »operator()« podatkovnega tipa »int«, in tukaj deklariramo »int arrOfNum«. Nato uporabimo 'return' in vstavimo 'int_num + arrOfNum'. Zdaj to poveča vrednosti »arrOfNum«, jim doda vrednost »int_num« in jih vrne sem.

Po priklicu »main()« inicializiramo »arrOfNum« in tukaj dodelimo različne celoštevilske vrednosti. Nato se inicializira spremenljivka 'n1', kjer dodamo funkcijo 'sizeof', kot je 'sizeof(arrOfNum)/sizeof(arrOfNum[0])'. Po tem se »additionNumber« inicializira s »3«. Zdaj uporabljamo funkcijo 'transform()'. Ta »transform()« je enak ustvarjanju predmeta razreda »increamentFunctor« in nato klicu njegovega objekta. Po tem uporabimo zanko »for« in nato »cout« »arrOfNum[i]«.

Koda 5:

#include
uporabo imenski prostor std ;
razred incrementFunctor
{
zasebno :
int int_num ;
javnosti :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operater ( ) ( int arrOfNum ) konst {
vrnitev int_num + arrOfNum ;
}
} ;
int glavni ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = sizeof ( arrOfNum ) / sizeof ( arrOfNum [ 0 ] ) ;
int dodatno število = 3 ;
transformirati ( arrOfNum, arrOfNum + n1, arrOfNum, funkcija prirastka ( dodatno število ) ) ;

za ( int jaz = 0 ; jaz < n1 ; jaz ++ )
cout << arrOfNum [ jaz ] << ' ' ;
}

Izhod:

Tukaj je prikazan rezultat kode, v katerem je »incrementFunctor« »Functor«, ki se uporablja kot funkcija.

Primer 6:

V tej kodi uporabljamo vnaprej določen »večji« funktor. Tukaj vključujemo štiri različne datoteke glave, kot jih zahtevamo v naši kodi, ker so v njih deklarirane funkcije ali metode, ki jih potrebujemo v naši kodi. Potem, ko dodamo »std« in nato pokličemo »main()«, inicializiramo vektor »myIntegerVector«. V ta vektor vstavimo nekaj nerazvrščenih vrednosti. Pod tem uporabimo funkcijo »sort« za razvrščanje teh vektorskih vrednosti.

Ko uporabimo to funkcijo, razvrsti vrednosti v naraščajočem vrstnem redu. Vendar tukaj uporabljamo »večje«, ki je vnaprej določena funkcija v C++, ki daje rezultat razvrščanja po padajočem načinu. Po tem prikažemo razvrščene vrednosti s pomočjo zanke “for” in nato “cout”.

Koda 6:

#include
#include
#include
#include
uporabo imenski prostor std ;

int glavni ( ) {
vektor < int > mojIntegerVector = { 13 , enaindvajset , 19 , 44 , 32 , 42 , 9 , 6 } ;
vrsta ( mojIntegerVector. začeti ( ) , mojIntegerVector. konec ( ) , večji < int > ( ) ) ;
za ( int vec_num : mojIntegerVector ) {
cout << vec_num << '' ;
}
vrnitev 0 ;
}

Izhod:

Vse vrednosti vektorja so razvrščene padajoče s pomočjo vnaprej določenega funktorja v C++, ki je »večji« funktor, njegova definicija pa je na voljo v »funkcionalni« glavi datoteki.

Zaključek

V tem članku je poglobljeno raziskan koncept »funktorja C++«. Preučevali smo, da je mogoče objekt priklicati kot funkcijo za preobremenitev funkcije, imenovane »operator()«. To je znano kot funktor. Javni dostop mora biti zagotovljen, da se preobremenitev »operatorja()« uporabi, kot je predvideno. Ilustrirali smo različne primere, v katerih smo uporabili 'funktorje' in vnaprej določene 'funktorje' v naši kodi.