Príklady funkcií C++

Priklady Funkcii C



Trieda C++, ktorá funguje ako funkcia, sa nazýva funktor. Na vyvolanie funktorov sa používa identická stará syntax volania funkcie. Vytvoríme objekt, ktorý preťaží „operator()“, aby vygeneroval funktor. Môžeme tiež povedať, že objekty, ktoré možno interpretovať ako funkciu alebo ukazovateľ funkcie, sa nazývajú funktory. Pri modelovaní funkčných efektov pomocou hodnôt parametrických dátových typov sú „funktory“ mimoriadne pohodlné. V tomto článku budeme podrobne študovať koncept funktora spolu s kódmi C++.

Príklad 1:

„iostream“ je hlavičkový súbor, ktorý tu uvádzame, pretože musíme využiť funkcie, ktoré sú deklarované v tomto hlavičkovom súbore. Hlavičkový súbor „iostream“ obsahuje deklaráciu funkcie. Tu je tiež pridaný priestor názvov „std“. Potom vygenerujeme triedu s názvom „FunctorClass“. Pod to napíšeme „public“, čo je verejný konštruktor, a umiestnime funkciu „operator()“. Potom do príkazu „cout“ umiestnime vetu, ktorú chceme vykresliť na obrazovku.

Potom zavoláme funkciu „main()“ a vytvoríme objekt triedy „FunctorClass“ s názvom „my_functor“. Tu voláme funkciu „my_functor()“, takže zobrazí príkaz, ktorý sme pridali pod funkciu „operator()“.







Kód 1:



#include
použitím menný priestor std ;
trieda FunctorClass {
verejnosti :
neplatné operátor ( ) ( ) {
cout << 'Tu sa volá operácia' ;
}
} ;
int Hlavná ( ) {
FunctorClass my_funktor ;
my_funktor ( ) ;

vrátiť 0 ;
}

Výkon:



Riadok, ktorý sme pridali do funkcie „operator()“ triedy „FunctorClass“, sa tu zobrazuje pomocou objektu funktora „my_functor“.





Príklad 2:

Súbor hlavičky „iostream“ sme sem zahrnuli, pretože v súbore hlavičky „iostream“ sa nachádza určitá deklarácia funkcie. Vloží sa aj menný priestor „std“. Ďalej vytvoríme triedu s názvom „SquareClass“.



Pod tým napíšeme „public“, čo je verejný konštruktor a pod neho umiestnime funkciu „operator()“ dátového typu „int“. Tejto funkcii „operator()“ odovzdáme premennú „val“ dátového typu „int“. Táto funkcia vráti výsledok násobenia, keď sme vložili „val * val“ do funkcie „return()“ pod funkciu „operator()“.

Teraz sa tu volá funkcia „main()“. Potom sa tu vytvorí objekt s názvom „s_functor“ triedy „SquareFunctor“. Potom použijeme „cout“, ktorý pomáha pri vykresľovaní informácií. Potom tu zavoláme objekt „my_functor()“ ako funkciu a vráti výsledok násobenia „5 * 5“, keď sme pri jeho volaní pridali ako parameter „5“.

Kód 2:

#include
použitím menný priestor std ;
trieda SquareClass {
verejnosti :
int operátor ( ) ( int val ) {
vrátiť ( val * val ) ;
}
} ;
int Hlavná ( ) {
SquareClass s_funktor ;
cout << 'Druhá mocnina danej hodnoty je' << endl ;
cout << s_funkcia ( 5 ) ;

vrátiť 0 ;
}

Výkon:

Výstup dostaneme po zavolaní objektu „my_functor“ triedy „SqaureClass“, ako je funkcia „my_functor()“, a potom odovzdaní „5“. Dostaneme „25“ ako druhú mocninu čísla „5“.

Príklad 3:

Hlavičkový súbor „iostream“ je tu zahrnutý, pretože obsahuje deklaráciu funkcie a následne je zavedený menný priestor „std“. Potom sa vytvorí trieda „ProductFunctor“. Verejný konštruktor „public“ je napísaný pod ním a funkcia „operator()“ dátového typu „int“ je umiestnená pod ním. Túto funkciu tu prepíšeme a odovzdáme do nej dva parametre: „int var1“ a „int var2“.

Potom použijeme „návrat“ pod týmto a vynásobíme obe premenné, ktoré vrátia výsledok násobenia oboch čísel „var1 * var2“. Potom sa tu zavolá funkcia „main()“ a vygenerujeme objekt triedy s názvom „P_functor“ triedy „ProductFunctor“. Potom inicializujeme novú premennú s názvom „pro_result“ a po jej zavolaní priradíme objekt „P_functor“ ako funkciu „P_functor()“.

Ako parameter prejdeme „28“ a „63“. Tým sa obe hodnoty vynásobia a výsledok sa uloží do premennej „pro_result“, ktorú vytlačíme pod touto premennou pomocou „cout“ a pridelíme do nej „pro_result“.

Kód 3:

#include
použitím menný priestor std ;
trieda ProductFunctor {
verejnosti :
int operátor ( ) ( int var1, int var2 ) {
vrátiť var1 * var2 ;
}
} ;
int Hlavná ( ) {
ProductFunctor P_funktor ;
int prod_result = P_funkcia ( 28 , 63 ) ;
cout << 'Produkt je:' << prod_result << endl ;
vrátiť 0 ;
}

Výkon:

Produkt získame po zavolaní objektu “P_functor” ako funkcie “P_functor()” a odovzdaní hodnôt mu. Súčin týchto hodnôt je „1764“.

Príklad 4:

V tomto prípade sa vygeneruje „GreetingFunctorClass“. Potom vložíme „verejný“ konštruktor a prepíšeme funkciu „operator()“ v tomto „verejnom“ konštruktore. Píšeme „Ahoj! Som tu programátor v C++“ po umiestnení „cout“ pod funkciu „operator()“.

Teraz budeme volať „main()“. Tu vytvoríme „g_functor“ ako objekt triedy „GreetingFunctorClass“ a potom tento objekt „g_functor“ zavoláme ako funkciu „g_functor()“. To dáva výsledok, ktorý sme pridali do funkcie „operator()“, pričom sme ju prepísali.

Kód 4:

#include
použitím menný priestor std ;
použitím menný priestor std ;
trieda PozdravFunctorClass {
verejnosti :
neplatné operátor ( ) ( ) {
cout << 'Ahoj! Som tu C++ programátor' ;
}
} ;
int Hlavná ( ) {
PozdravFunctorClass g_functor ;
g_funkcia ( ) ;
vrátiť 0 ;
}

Výkon:

Tu si môžeme všimnúť, že vyhlásenie, ktoré sme pridali, keď sme prepísali funkciu „operator()“ v našom kóde, sa tu zobrazuje, keď voláme objekt triedy ako funkciu.

Príklad 5:

Tentoraz je zahrnutý súbor „bits/stdc++.h“, pretože obsahuje všetky potrebné deklarácie funkcií. Potom sa sem umiestni priestor názvov „std“. Trieda, ktorú tu vytvoríme, je trieda „incrementFunctor“. Potom vytvoríme „súkromný“ konštruktor a inicializujeme premennú „int_num“ s dátovým typom „int“.

Pod tento, „verejný“ konštruktor, umiestnime „incrementFunctor“ a vložíme do neho „int n1“. Potom napíšeme „int_num(n1)“ po umiestnení „:“. Potom prepíšeme funkciu, ktorá je funkciou „operator()“ dátového typu „int“ a deklarujeme tu „int arrOfNum“. Potom použijeme „return“ a vložíme „int_num + arrOfNum“. Teraz sa tým zvýšia hodnoty „arrOfNum“, pridá sa k nim hodnota „int_num“ a vrátia sa sem.

Po vyvolaní funkcie „main()“ inicializujeme „arrOfNum“ a priradíme tu rôzne celočíselné hodnoty. Potom sa inicializuje premenná „n1“, do ktorej pridáme funkciu „veľkosť“, ako napríklad „veľkosť(poľovéNum)/veľkosť(poľovéNum[0])”. Potom sa „additionNumber“ inicializuje na „3“. Teraz použijeme funkciu „transform()“. Táto „transform()“ je rovnaká ako vytvorenie objektu triedy „increamentFunctor“ a následné volanie jeho objektu. Potom použijeme cyklus „for“ a potom „cout“ „arrOfNum[i]“.

Kód 5:

#include
použitím menný priestor std ;
trieda incrementFunctor
{
súkromné :
int int_num ;
verejnosti :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operátor ( ) ( int arrOfNum ) konšt {
vrátiť int_num + arrOfNum ;
}
} ;
int Hlavná ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = veľkosť ( arrOfNum ) / veľkosť ( arrOfNum [ 0 ] ) ;
int prídavné číslo = 3 ;
transformovať ( arrOfNum, arrOfNum + n1, arrOfNum, incrementFunctor ( prídavné číslo ) ) ;

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

Výkon:

Tu je zobrazený výsledok kódu, v ktorom „incrementFunctor“ je „Functor“, ktorý sa používa ako funkcia.

Príklad 6:

V tomto kóde používame preddefinovaný funktor „väčší“. Tu uvádzame štyri rôzne hlavičkové súbory, ako ich vyžadujeme v našom kóde, pretože funkcie alebo metódy, ktoré potrebujeme v našom kóde, sú v nich deklarované. Potom, po pridaní „std“ a volaní „main()“, inicializujeme vektor „myIntegerVector“. Do tohto vektora vložíme niekoľko nezoradených hodnôt. Pod tým použijeme funkciu „triediť“ na zoradenie týchto vektorových hodnôt.

Keď použijeme túto funkciu, zoradí hodnoty vo vzostupnom poradí. Ale používame tu „väčší“, čo je preddefinovaná funkcia v C++, ktorá dáva výsledok triedenia zostupným spôsobom. Potom zobrazíme zoradené hodnoty pomocou cyklu „for“ a následne „cout“.

Kód 6:

#include
#include
#include
#include
použitím menný priestor std ;

int Hlavná ( ) {
vektor < int > myIntegerVector = { 13 , dvadsaťjeden , 19 , 44 , 32 , 42 , 9 , 6 } ;
triediť ( myIntegerVector. začať ( ) , myIntegerVector. koniec ( ) , väčší < int > ( ) ) ;
pre ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
vrátiť 0 ;
}

Výkon:

Všetky hodnoty vektora sú zoradené zostupne pomocou preddefinovaného funktora v C++, ktorý je „väčším“ funktorom a jeho definícia je dostupná vo „funkčnom“ hlavičkovom súbore.

Záver

Koncept „funktora C++“ je podrobne preskúmaný v tomto článku. Študovali sme, že objekt možno vyvolať ako funkciu na preťaženie funkcie nazývanej „operátor()“. Toto je známe ako funktor. Musí byť zabezpečený verejný prístup, aby sa preťaženie „operátora()“ využilo podľa plánu. Ilustrovali sme rôzne príklady, v ktorých sme použili „funktory“ a preddefinovaný „funktor“ v našom kóde.