Funkcija C++ Primjeri

Funkcija C Primjeri



C++ klasa koja radi kao funkcija naziva se funktor. Identična stara sintaksa poziva funkcije koristi se za pozivanje funktora. Stvaramo objekt koji preopterećuje 'operator()' da bi generirao funktor. Također možemo reći da se objekti koji se mogu interpretirati kao funkcija ili pokazivač funkcije nazivaju funktorima. Pri modeliranju funkcionalnih učinaka korištenjem vrijednosti parametarskih tipova podataka, 'funktori' su izuzetno prikladni. U ovom će se članku detaljno proučiti koncept funktora zajedno s C++ kodovima.

Primjer 1:

'iostream' je datoteka zaglavlja koju ovdje uključujemo jer moramo koristiti funkcije koje su deklarirane u ovoj datoteci zaglavlja. Datoteka zaglavlja 'iostream' sadrži deklaraciju funkcije. Ovdje se također dodaje prostor imena “std”. Zatim generiramo klasu pod nazivom 'FunctorClass'. Ispod ovoga upisujemo 'public' koji je ovdje javni konstruktor i postavljamo funkciju 'operator()'. Zatim rečenicu koju želimo prikazati na ekranu postavljamo u naredbu “cout”.

Nakon toga pozivamo funkciju “main()” i zatim stvaramo objekt “FunctorClass” s imenom “my_functor”. Ovdje pozivamo funkciju 'my_functor()' tako da prikazuje izjavu koju smo dodali ispod funkcije 'operator()'.







Kod 1:



#include
korištenjem imenski prostor std ;
razreda FunctorClass {
javnost :
poništiti operater ( ) ( ) {
cout << 'Operacija se zove ovdje' ;
}
} ;
int glavni ( ) {
FunktorKlasa moj_funktor ;
moj_funktor ( ) ;

povratak 0 ;
}

Izlaz:



Redak koji smo dodali u funkciju “operator()” u “FunctorClass” prikazan je ovdje korištenjem objekta funktora “my_functor”.





Primjer 2:

Ovdje uključujemo datoteku zaglavlja 'iostream' jer je neka deklaracija funkcije sadržana u datoteci zaglavlja 'iostream'. Također je umetnut prostor imena 'std'. Zatim stvaramo klasu pod nazivom 'SquareClass'.



Ispod toga upisujemo 'public' koji je javni konstruktor i postavljamo funkciju 'operator()' tipa podataka 'int' ispod njega. Prosljeđujemo varijablu 'val' tipa podataka 'int' ovoj funkciji 'operator()'. Ova funkcija vraća rezultat množenja jer smo umetnuli 'val * val' u funkciju 'return()' ispod funkcije 'operator()'.

Sada se ovdje poziva funkcija “main()”. Zatim se ovdje stvara objekt s nazivom “s_functor” klase “SquareFunctor”. Zatim koristimo 'cout' koji pomaže u prikazivanju informacija. Nakon toga, ovdje pozivamo objekt “my_functor()” kao funkciju i vraća rezultat množenja “5 * 5” jer smo dodali “5” kao parametar dok ga pozivamo.

Kod 2:

#include
korištenjem imenski prostor std ;
razreda SquareClass {
javnost :
int operater ( ) ( int val ) {
povratak ( val * val ) ;
}
} ;
int glavni ( ) {
SquareClass s_funktor ;
cout << 'Kvadrat zadane vrijednosti je ' << endl ;
cout << s_funkcija ( 5 ) ;

povratak 0 ;
}

Izlaz:

Izlaz dobivamo nakon pozivanja objekta “my_functor” klase “SqaureClass” poput funkcije “my_functor()” i prosljeđivanja “5”. Dobivamo '25' kao kvadrat broja '5'.

Primjer 3:

Datoteka zaglavlja 'iostream' je ovdje uključena jer sadrži deklaraciju funkcije, a prostor imena 'std' uvodi se nakon toga. Zatim se pravi klasa 'ProductFunctor'. Javni konstruktor, “public”, upisan je ispod njega, a funkcija “operator()” tipa podataka “int” smještena je ispod njega. Ovdje nadjačavamo ovu funkciju i prosljeđujemo joj dva parametra: 'int var1' i 'int var2'.

Zatim koristimo 'return' ispod ovoga i množimo obje varijable koje vraćaju rezultat množenja oba broja 'var1 * var2'. Zatim se ovdje poziva funkcija “main()” i mi generiramo objekt klase s imenom “P_functor” klase “ProductFunctor”. Zatim inicijaliziramo novu varijablu s imenom “pro_result” i dodjeljujemo objekt “P_functor” kao funkciju “P_functor()” nakon što je pozovemo.

Prosljeđujemo '28' i '63' kao parametar. Ovo će pomnožiti obje vrijednosti i spremiti rezultat u varijablu 'pro_result' koju ispisujemo ispod ove koristeći 'cout' i prosljeđujući 'pro_result' u njoj.

Kod 3:

#include
korištenjem imenski prostor std ;
razreda ProductFunctor {
javnost :
int operater ( ) ( int var1, int var2 ) {
povratak var1 * var2 ;
}
} ;
int glavni ( ) {
ProductFunctor P_functor ;
int proizvod_rezultat = P_funkcija ( 28 , 63 ) ;
cout << 'Proizvod je: ' << proizvod_rezultat << endl ;
povratak 0 ;
}

Izlaz:

Proizvod dobivamo nakon pozivanja objekta “P_functor” kao funkcije “P_functor()” i prosljeđivanja vrijednosti u njega. Umnožak tih vrijednosti je '1764'.

Primjer 4:

U ovom slučaju generira se 'GreetingFunctorClass'. Zatim umećemo 'javni' konstruktor i nadjačavamo funkciju 'operator()' u ovom 'javnom' konstruktoru. Tipkamo “Zdravo! Ovdje sam C++ programer' nakon što je 'cout' stavljen ispod funkcije 'operator()'.

Sada nadalje, pozivamo 'main()'. Ovdje stvaramo “g_functor” kao objekt “GreetingFunctorClass” i zatim pozivamo ovaj “g_functor” objekt kao funkciju “g_functor()”. To daje ishod koji smo dodali u funkciju 'operator()' dok je nadjačavamo.

Kod 4:

#include
korištenjem imenski prostor std ;
korištenjem imenski prostor std ;
razreda Pozdrav FunctorClass {
javnost :
poništiti operater ( ) ( ) {
cout << 'Zdravo! Ovdje sam C++ programer' ;
}
} ;
int glavni ( ) {
PozdravFunctorClass g_functor ;
g_funkcija ( ) ;
povratak 0 ;
}

Izlaz:

Ovdje bismo mogli primijetiti da se izjava koju smo dodali kada smo poništili funkciju 'operator()' u našem kodu prikazuje ovdje dok objekt klase nazivamo poput funkcije.

Primjer 5:

'bits/stdc++.h' je ovaj put uključen jer sadrži sve potrebne deklaracije funkcija. Zatim se ovdje postavlja imenski prostor 'std'. Klasa koju ovdje stvaramo je klasa 'incrementFunctor'. Zatim stvaramo 'privatni' konstruktor i inicijaliziramo varijablu 'int_num' tipom podataka 'int'.

Ispod ovog, 'javnog' konstruktora, postavljamo 'incrementFunctor' i prosljeđujemo 'int n1' unutar njega. Zatim upisujemo “int_num(n1)” nakon postavljanja “:”. Zatim nadjačavamo funkciju koja je funkcija 'operator()' tipa podataka 'int' i ovdje deklariramo 'int arrOfNum'. Zatim koristimo 'return' i umećemo 'int_num + arrOfNum'. Ovo sada povećava vrijednosti 'arrOfNum', dodaje im vrijednost 'int_num' i vraća ih ovdje.

Nakon pozivanja “main()”, inicijaliziramo “arrOfNum” i ovdje dodjeljujemo različite vrijednosti cijelog broja. Zatim se inicijalizira varijabla “n1” kojoj dodajemo funkciju “sizeof” poput “sizeof(arrOfNum)/sizeof(arrOfNum[0])”. Nakon toga, 'AdditionNumber' se zatim inicijalizira s '3'. Sada koristimo funkciju 'transform()'. Ovaj “transform()” je isti kao stvaranje objekta klase “increamentFunctor” i zatim pozivanje njegovog objekta. Nakon toga koristimo petlju 'for', a zatim 'cout' 'arrOfNum[i]'.

Kod 5:

#include
korištenjem imenski prostor std ;
razreda inkrementFunctor
{
privatna :
int int_num ;
javnost :
inkrementFunctor ( int n1 ) : int_num ( n1 ) { }
int operater ( ) ( int arrOfNum ) konst {
povratak int_num + arrOfNum ;
}
} ;
int glavni ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = veličina ( arrOfNum ) / veličina ( arrOfNum [ 0 ] ) ;
int dodatni broj = 3 ;
transformirati ( arrOfNum, arrOfNum + n1, arrOfNum, funkcija povećanja ( dodatni broj ) ) ;

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

Izlaz:

Ovdje je prikazan ishod koda u kojem je 'incrementFunctor' 'Functor' koji se koristi kao funkcija.

Primjer 6:

U ovom kodu koristimo unaprijed definirani 'veći' funktor. Ovdje uključujemo četiri različite datoteke zaglavlja koje zahtijevamo u našem kodu jer su funkcije ili metode koje su nam potrebne u našem kodu deklarirane u njima. Zatim, nakon dodavanja “std” i zatim pozivanja “main()”, inicijaliziramo vektor “myIntegerVector”. Umećemo neke nesortirane vrijednosti u ovaj vektor. Ispod ovoga primjenjujemo funkciju 'sort' za sortiranje ovih vektorskih vrijednosti.

Kada koristimo ovu funkciju, ona sortira vrijednosti uzlaznim redoslijedom. Ali mi ovdje koristimo 'veće', što je unaprijed definirana funkcija u C++ koja daje rezultat sortiranja na silazni način. Nakon toga, prikazujemo sortirane vrijednosti uz pomoć “for” petlje, a zatim “cout”.

Kod 6:

#include
#include
#uključi
#include
korištenjem imenski prostor std ;

int glavni ( ) {
vektor < int > mojIntegerVector = { 13 , dvadeset i jedan , 19 , 44 , 32 , 42 , 9 , 6 } ;
vrsta ( mojIntegerVector. početi ( ) , mojCijeliVektor. kraj ( ) , veće < int > ( ) ) ;
za ( int vec_num : mojIntegerVector ) {
cout << vec_num << '' ;
}
povratak 0 ;
}

Izlaz:

Sve vrijednosti vektora poredane su silaznim putem uz pomoć unaprijed definiranog funktora u C++ koji je 'veći' funktor, a njegova je definicija dostupna u 'funkcionalnoj' datoteci zaglavlja.

Zaključak

Koncept 'funktora C++' detaljno je istražen u ovom članku. Proučavali smo da se objekt može pozvati kao funkcija za preopterećenje funkcije pod nazivom 'operator()'. Ovo je poznato kao funktor. Mora se osigurati javni pristup kako bi se preopterećenje 'operatora()' koristilo kako je predviđeno. Ilustrirali smo različite primjere u kojima smo koristili 'funktore' i unaprijed definirane 'funktore' u našem kodu.