Příklady funkcí C++

Priklady Funkci C



Třída C++, která funguje jako funkce, se nazývá funktor. K vyvolání funktorů se používá stejná stará syntaxe volání funkce. Vytvoříme objekt, který přetíží „operator()“, aby vygeneroval funktor. Můžeme také říci, že objekty, které lze interpretovat buď jako funkce nebo jako ukazatel funkce, se nazývají funktory. Při modelování funkčních efektů pomocí hodnot parametrických datových typů jsou „funktory“ mimořádně pohodlné. V tomto článku bude koncept funktoru podrobně studován spolu s kódy C++.

Příklad 1:

„iostream“ je hlavičkový soubor, který zde uvádíme, protože musíme využít funkce, které jsou deklarovány v tomto hlavičkovém souboru. Soubor záhlaví „iostream“ obsahuje deklaraci funkce. Zde je také přidán jmenný prostor „std“. Poté vygenerujeme třídu s názvem „FunctorClass“. Pod to napíšeme „public“, což je veřejný konstruktor, a umístíme funkci „operator()“. Poté umístíme větu, kterou chceme vykreslit na obrazovku do příkazu „cout“.

Poté zavoláme funkci „main()“ a vytvoříme objekt třídy „FunctorClass“ s názvem „my_functor“. Zde zavoláme funkci „my_functor()“, takže zobrazí příkaz, který jsme přidali pod funkci „operator()“.







Kód 1:



#include
použitím jmenný prostor std ;
třída FunctorClass {
veřejnost :
prázdnota operátor ( ) ( ) {
cout << 'Tady se nazývá operace' ;
}
} ;
int hlavní ( ) {
FunctorClass my_funktor ;
my_funktor ( ) ;

vrátit se 0 ;
}

Výstup:



Řádek, který jsme přidali do funkce „operator()“ třídy „FunctorClass“, se zde zobrazí s využitím objektu funktoru „my_functor“.





Příklad 2:

Soubor záhlaví „iostream“ sem zařazujeme, protože některá deklarace funkce je obsažena v souboru záhlaví „iostream“. Je také vložen jmenný prostor „std“. Dále vytvoříme třídu s názvem „SquareClass“.



Pod to napíšeme „public“, což je veřejný konstruktor, a pod něj umístíme funkci „operator()“ datového typu „int“. Této funkci „operator()“ předáme proměnnou „val“ datového typu „int“. Tato funkce vrací výsledek násobení, protože jsme vložili „val * val“ do funkce „return()“ pod funkci „operator()“.

Nyní se zde volá funkce „main()“. Poté se zde vytvoří objekt s názvem „s_functor“ třídy „SquareFunctor“. Poté použijeme „cout“, který pomáhá při vykreslování informací. Poté zde zavoláme objekt „my_functor()“ jako funkci a vrátí výsledek násobení „5 * 5“, protože jsme při volání přidali jako parametr „5“.

Kód 2:

#include
použitím jmenný prostor std ;
třída SquareClass {
veřejnost :
int operátor ( ) ( int val ) {
vrátit se ( val * val ) ;
}
} ;
int hlavní ( ) {
SquareClass s_funktor ;
cout << 'Druhá druhá mocnina dané hodnoty je' << endl ;
cout << s_funkce ( 5 ) ;

vrátit se 0 ;
}

Výstup:

Výstup získáme po zavolání objektu „my_functor“ třídy „SqaureClass“, jako je funkce „my_functor()“, a předání „5“. Dostaneme „25“ jako druhou mocninu čísla „5“.

Příklad 3:

Soubor záhlaví „iostream“ je zde zahrnut, protože obsahuje deklaraci funkce a poté je zaveden jmenný prostor „std“. Poté se vytvoří třída „ProductFunctor“. Veřejný konstruktor „public“ je napsán pod ním a pod ním je umístěna funkce „operator()“ datového typu „int“. Tuto funkci zde přepíšeme a předáme do ní dva parametry: „int var1“ a „int var2“.

Potom použijeme „návrat“ pod tímto a vynásobíme obě proměnné, které vrátí výsledek násobení obou čísel „var1 * var2“. Zde se zavolá funkce „main()“ a vygenerujeme objekt třídy s názvem „P_functor“ třídy „ProductFunctor“. Poté inicializujeme novou proměnnou s názvem „pro_result“ a po zavolání přiřadíme objekt „P_functor“ jako funkci „P_functor()“.

Jako parametr předáme „28“ a „63“. Tím se obě hodnoty vynásobí a výsledek se uloží do proměnné „pro_result“, kterou vytiskneme pod tímto pomocí „cout“ a předáme do ní „pro_result“.

Kód 3:

#include
použitím jmenný prostor std ;
třída ProductFunctor {
veřejnost :
int operátor ( ) ( int var1, int var2 ) {
vrátit se var1 * var2 ;
}
} ;
int hlavní ( ) {
ProductFunctor P_funktor ;
int prod_result = P_funkce ( 28 , 63 ) ;
cout << 'Výrobek je:' << prod_result << endl ;
vrátit se 0 ;
}

Výstup:

Produkt získáme po zavolání objektu „P_functor“ jako funkce „P_functor()“ a předání hodnot do něj. Součin těchto hodnot je „1764“.

Příklad 4:

V tomto případě se vygeneruje „GreetingFunctorClass“. Poté vložíme konstruktor „public“ a přepíšeme funkci „operator()“ v tomto „veřejném“ konstruktoru. Píšeme „Ahoj! Jsem zde programátor v C++“ poté, co jsem umístil „cout“ pod funkci „operator()“.

Nyní dále nazýváme „main()“. Zde vytvoříme „g_functor“ jako objekt třídy „GreetingFunctorClass“ a pak tento objekt „g_functor“ zavoláme jako funkci „g_functor()“. To dává výsledek, který jsme přidali do funkce „operator()“, zatímco jsme ji přepsali.

Kód 4:

#include
použitím jmenný prostor std ;
použitím jmenný prostor std ;
třída PozdravFunctorClass {
veřejnost :
prázdnota operátor ( ) ( ) {
cout << 'Dobrý den! Jsem zde programátor v C++' ;
}
} ;
int hlavní ( ) {
GreetingFunctorClass g_functor ;
g_funkce ( ) ;
vrátit se 0 ;
}

Výstup:

Zde si můžeme všimnout, že příkaz, který jsme přidali, když jsme přepsali funkci „operator()“ v našem kódu, se zde zobrazuje, když nazýváme objekt třídy jako funkci.

Příklad 5:

Tentokrát je zahrnut soubor „bits/stdc++.h“, protože obsahuje všechny potřebné deklarace funkcí. Poté se sem umístí jmenný prostor „std“. Třída, kterou zde vytvoříme, je třída „incrementFunctor“. Poté vytvoříme „soukromý“ konstruktor a inicializujeme proměnnou „int_num“ s datovým typem „int“.

Pod tento, „veřejný“ konstruktor, umístíme „incrementFunctor“ a předáme do něj „int n1“. Poté napíšeme „int_num(n1)“ po umístění „:“. Poté přepíšeme funkci, která je funkcí „operator()“ datového typu „int“, a zde deklarujeme „int arrOfNum“. Poté použijeme „return“ a vložíme „int_num + arrOfNum“. Nyní to zvýší hodnoty „arrOfNum“, přidá do nich hodnotu „int_num“ a vrátí je sem.

Po vyvolání „main()“ inicializujeme „arrOfNum“ a zde přiřadíme různé celočíselné hodnoty. Poté se inicializuje proměnná „n1“, kam přidáme funkci „sizeof“ jako „sizeof(arrOfNum)/sizeof(arrOfNum[0])“. Poté je „additionNumber“ inicializováno „3“. Nyní použijeme funkci „transform()“. Tato „transform()“ je stejná jako vytvoření objektu třídy „increamentFunctor“ a následné volání jeho objektu. Poté použijeme smyčku „for“ a poté „coutujeme“ „arrOfNum[i]“.

Kód 5:

#include
použitím jmenný prostor std ;
třída incrementFunctor
{
soukromé :
int int_num ;
veřejnost :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operátor ( ) ( int arrOfNum ) konst {
vrátit se int_num + arrOfNum ;
}
} ;
int hlavní ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = velikost ( arrOfNum ) / velikost ( arrOfNum [ 0 ] ) ;
int přídavné číslo = 3 ;
přeměnit ( arrOfNum, arrOfNum + n1, arrOfNum, incrementFunctor ( přídavné číslo ) ) ;

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

Výstup:

Zde je zobrazen výsledek kódu, ve kterém „incrementFunctor“ je „Functor“, který se používá jako funkce.

Příklad 6:

V tomto kódu používáme předdefinovaný funktor „větší“. Zde uvádíme čtyři různé hlavičkové soubory, jak je v našem kódu požadujeme, protože funkce nebo metody, které potřebujeme v našem kódu, jsou v nich deklarovány. Poté, po přidání „std“ a volání „main()“, inicializujeme vektor „myIntegerVector“. Do tohoto vektoru vložíme některé neseřazené hodnoty. Pod tím použijeme funkci „sort“ pro třídění těchto vektorových hodnot.

Když použijeme tuto funkci, seřadí hodnoty ve vzestupném pořadí. Ale my zde používáme „větší“, což je předdefinovaná funkce v C++, která dává výsledek řazení sestupným způsobem. Poté zobrazíme setříděné hodnoty pomocí cyklu „for“ a poté „cout“.

Kód 6:

#include
#include
#include
#include
použitím jmenný prostor std ;

int hlavní ( ) {
vektor < int > myIntegerVector = { 13 , dvacet jedna , 19 , 44 , 32 , 42 , 9 , 6 } ;
seřadit ( myIntegerVector. začít ( ) , myIntegerVector. konec ( ) , větší < int > ( ) ) ;
pro ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
vrátit se 0 ;
}

Výstup:

Všechny hodnoty vektoru jsou seřazeny sestupně pomocí předdefinovaného funktoru v C++, což je funktor „větší“, a jeho definice je dostupná v hlavičce „funkční“.

Závěr

Koncept „funktoru C++“ je hluboce prozkoumán v tomto článku. Studovali jsme, že objekt lze vyvolat jako funkci k přetížení funkce zvané „operator()“. Toto je známé jako funktor. Aby bylo možné využít zamýšlené využití přetížení „operátora()“, musí být zajištěn veřejný přístup. Ilustrovali jsme různé příklady, ve kterých jsme použili „funktory“ a předdefinovaný „funktor“ v našem kódu.