Funkcija ir paziņojumu kopa, kas ņem ievadi, veic noteiktus aprēķinus, un ražo produkciju. Ideja ir ievietot dažus bieži vai atkārtoti veica uzdevumus kopā, lai a funkciju tā vietā, lai atkal un atkal rakstītu vienu un to pašu kodu dažādām ievadēm, mēs varam izsaukt šo funkciju.
Vienkārši izsakoties, funkcija ir koda bloks, kas darbojas tikai tad, kad tā tiek izsaukta.
Sintakse:
arduino funkcijas

Funkcijas sintakse
Piemērs:
C++
// C++ Program to demonstrate working of a function> #include> using> namespace> std;> // Following function that takes two parameters 'x' and 'y'> // as input and returns max of two input numbers> int> max(> int> x,> int> y)> {> > if> (x>y)> > return> x;> > else> > return> y;> }> // main function that doesn't receive any parameter and> // returns integer> int> main()> {> > int> a = 10, b = 20;> > // Calling above function to find max of 'a' and 'b'> > int> m = max(a, b);> > cout <<> 'm is '> << m;> > return> 0;> }> |
>
>Izvade
m is 20>
Laika sarežģītība: O(1)
Telpas sarežģītība: O(1)
Kāpēc mums ir vajadzīgas funkcijas?
- Funkcijas mums palīdz samazinot koda dublēšanos . Ja programmatūrā funkcionalitāte tiek veikta vairākās vietās, tad tā vietā, lai rakstītu vienu un to pašu kodu, mēs atkal un atkal izveidojam funkciju un saucam to visur. Tas palīdz arī veikt apkopi, jo mums ir jāveic izmaiņas tikai vienā vietā, ja turpmāk veiksim izmaiņas funkcionalitātē.
- Funkcijas veido kodu modulāra . Apsveriet lielu failu ar daudzām koda rindiņām. Koda lasīšana un lietošana kļūst patiešām vienkārša, ja kods ir sadalīts funkcijās.
- Funkcijas nodrošina abstrakcija . Piemēram, mēs varam izmantot bibliotēkas funkcijas, neuztraucoties par to iekšējo darbu.
Funkcijas deklarācija
Funkcijas deklarācija informē kompilatoru par parametru skaitu, parametru datu veidiem un atgriež funkcijas veidu. Parametru nosaukumu rakstīšana funkciju deklarācijā nav obligāta, taču tie ir jāievieto definīcijā. Tālāk ir sniegts funkciju deklarāciju piemērs. (parametru nosaukumi nav norādīti tālāk norādītajās deklarācijās)

Funkcijas deklarācija
Piemērs:
C++
// C++ Program to show function that takes> // two integers as parameters and returns> // an integer> int> max(> int> ,> int> );> // A function that takes an int> // pointer and an int variable> // as parameters and returns> // a pointer of type int> int> * swap(> int> *,> int> );> // A function that takes> // a char as parameter and> // returns a reference variable> char> * call(> char> b);> // A function that takes a> // char and an int as parameters> // and returns an integer> int> fun(> char> ,> int> );> |
>
>
Funkciju veidi

Funkciju veidi programmā C++
Lietotāja definēta funkcija
Lietotāja definētas funkcijas ir lietotāja/klienta definēti koda bloki, kas īpaši pielāgoti, lai samazinātu lielu programmu sarežģītību. Tie ir arī plaši pazīstami kā īpaši pielāgotas funkcijas kas ir veidoti tikai, lai apmierinātu nosacījumus, kādos lietotājs saskaras ar problēmām, vienlaikus samazinot visas programmas sarežģītību.
Bibliotēkas funkcija
Tiek sauktas arī bibliotēkas funkcijas iebūvētās funkcijas . Šīs funkcijas ir daļa no kompilatora pakotnes, kas jau ir definēta un sastāv no īpašas funkcijas ar īpašām un dažādām nozīmēm. Iebūvētā funkcija sniedz mums priekšrocības, jo mēs varam tās tieši izmantot, tās nedefinējot, turpretim lietotāja definētajā funkcijā funkcija ir jādeklarē un jādefinē pirms to izmantošanas.
Piemēram: sqrt (), setw (), strcat () utt.
Parametru pāreja uz funkcijām
Tiek izsaukti funkcijai nodotie parametri faktiskie parametri . Piemēram, zemāk esošajā programmā 5 un 10 ir faktiskie parametri.
Funkcijas saņemtie parametri tiek izsaukti formālie parametri . Piemēram, iepriekš minētajā programmā x un y ir formāli parametri.

Formālais parametrs un faktiskais parametrs
Ir divi populārākie parametru nodošanas veidi:
- Paiet pēc vērtības: Šajā parametru nodošanas metodē faktisko parametru vērtības tiek kopētas uz funkcijas formālajiem parametriem. Faktiskie un formālie parametri tiek glabāti dažādās atmiņas vietās, tāpēc funkcijās veiktās izmaiņas netiek atspoguļotas zvanītāja faktiskajos parametros.
- Pāriet ar atsauci: Gan faktiskie, gan formālie parametri attiecas uz tām pašām vietām, tāpēc visas funkcijas ietvaros veiktās izmaiņas tiek atspoguļotas zvanītāja faktiskajos parametros.
Funkcijas definīcija
Paiet garām vērtībai tiek izmantots, ja x vērtība netiek mainīta, izmantojot funkciju fun().
C++
// C++ Program to demonstrate function definition> #include> using> namespace> std;> void> fun(> int> x)> {> > // definition of> > // function> > x = 30;> }> int> main()> {> > int> x = 20;> > fun(x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
aktrise Zeenat Aman
>Izvade
x = 20>
Laika sarežģītība: O(1)
Telpas sarežģītība: O(1)
Funkcijas, izmantojot rādītājus
Funkcija fun() sagaida rādītāja ptr uz veselu skaitli (vai vesela skaitļa adresi). Tas maina vērtību adresē ptr. Atsauces operators * tiek izmantots, lai piekļūtu vērtībai adresē. Paziņojumā “*ptr = 30” vērtība adresē ptr tiek mainīta uz 30. Adreses operators & tiek izmantots, lai iegūtu jebkura datu tipa mainīgā adresi. Funkcijas izsaukšanas priekšrakstā “fun(&x)” tiek nodota x adrese, lai x varētu modificēt, izmantojot tā adresi.
C++
// C++ Program to demonstrate working of> // function using pointers> #include> using> namespace> std;> void> fun(> int> * ptr) { *ptr = 30; }> int> main()> {> > int> x = 20;> > fun(&x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>Izvade
x = 30>
Laika sarežģītība: O(1)
Telpas sarežģītība: O(1)
Atšķirība starp zvanu pēc vērtības un zvanu pēc atsauces valodā C++
Zvanīt pēc vērtības | Zvanīt pēc atsauces |
---|---|
Vērtības kopija tiek nodota funkcijai | Vērtības adrese tiek nodota funkcijai |
Funkcijā veiktās izmaiņas nav atspoguļots arī citās funkcijās | Funkcijā veiktās izmaiņas tiek atspoguļotas arī ārpus funkcijas |
Faktiskie un formālie argumenti tiks izveidoti plkst dažādas atmiņas vietas | Faktiskie un formālie argumenti tiks izveidoti plkst tajā pašā atmiņas vietā. |
Lietas, kas jāatceras par C++ funkcijām
1. Lielākajai daļai C++ programmu ir funkcija main(), ko izsauc operētājsistēma, kad lietotājs palaiž programmu.
2. Katrai funkcijai ir atgriešanas veids. Ja funkcija neatgriež nekādu vērtību, kā atgriešanas veids tiek izmantots void. Turklāt, ja funkcijas atgriešanas veids ir nederīgs, mēs joprojām varam izmantot atgriešanas paziņojumu funkcijas definīcijas pamattekstā, nenorādot ar to nevienu konstanti, mainīgo utt., pieminot tikai paziņojumu 'atgriešanās;'. simbolizē funkcijas izbeigšanu, kā parādīts zemāk:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. Lai deklarētu funkciju, kuru var izsaukt tikai bez parametriem, mums vajadzētu izmantot tukša jautrība (tukšums) . Kā sānu piezīme, C++, tukšs saraksts nozīmē, ka funkciju var izsaukt tikai bez parametriem. Programmā C++ gan void fun() gan void fun(void) ir vienādi.
Galvenā funkcija
Galvenā funkcija ir īpaša funkcija. Katrā C++ programmā ir jābūt funkcijai ar nosaukumu main. Tas kalpo kā programmas ieejas punkts. Dators sāks palaist kodu no galvenās funkcijas sākuma.
Galveno funkciju veidi
1. Bez parametriem:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
singleton dizaina modelis java
>
>
2. Ar parametriem:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
Iemesls, kāpēc galvenajai funkcijai ir parametru opcija, ir atļaut ievadi no komandrindas. Ja izmantojat galveno funkciju ar parametriem, tā saglabā katru rakstzīmju grupu (atdalot ar atstarpi) pēc programmas nosaukuma kā elementus masīvā ar nosaukumu argv .
Tā kā galvenajai funkcijai ir atgriešanās veids starpt , programmētājam kodā vienmēr ir jābūt atgriešanas paziņojumam. Atgrieztais numurs tiek izmantots, lai informētu izsaucošo programmu, kāds bija programmas izpildes rezultāts. Atgriežot 0, tas norāda, ka problēmu nav.
C++ rekursija
Ja funkcija tiek izsaukta vienā un tajā pašā funkcijā, C++ valodā to sauc par rekursiju. Funkciju, kas izsauc to pašu funkciju, sauc par rekursīvo funkciju.
Funkciju, kas izsauc sevi un pēc funkcijas izsaukšanas neveic nekādus uzdevumus, sauc par astes rekursiju. Astes rekursijā mēs parasti izsaucam to pašu funkciju ar atgriešanas paziņojumu.
Sintakse:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Lai uzzinātu vairāk, skatiet Šis raksts .
C++ masīva nodošana funkcijai
Programmā C++, lai atkārtoti izmantotu masīva loģiku, mēs varam izveidot funkciju. Lai masīvu nodotu funkcijai programmā C++, mums jānorāda tikai masīva nosaukums.
function_name(array_name[]); //passing array to function>
Piemērs: izdrukājiet minimālo skaitu dotajā masīvā.
C++
#include> using> namespace> std;> void> printMin(> int> arr[5]);> int> main()> {> > int> ar[5] = { 30, 10, 20, 40, 50 };> > printMin(ar);> // passing array to function> }> void> printMin(> int> arr[5])> {> > int> min = arr[0];> > for> (> int> i = 0; i <5; i++) {> > if> (min>arr[i]) {> > min = arr[i];> > }> > }> > cout <<> 'Minimum element is: '> << min <<> '
'> ;> }> // Code submitted by Susobhan Akhuli> |
>
>Izvade
Minimum element is: 10>
Laika sarežģītība: O(n) kur n ir masīva lielums
Telpas sarežģītība: O(n) kur n ir masīva lielums.
C++ pārslodze (funkcija)
Ja mēs izveidojam divus vai vairākus dalībniekus ar vienādu nosaukumu, bet atšķiras pēc skaita vai parametru veida, to sauc par C++ pārslodzi. Programmā C++ mēs varam pārslogot:
- metodes,
- konstruktori un
- indeksētas īpašības
C++ pārslodzes veidi ir:
- Funkciju pārslodze
- Operatora pārslodze
C++ funkciju pārslodze
Funkciju pārslodze ir definēta kā process, kurā ir divas vai vairākas funkcijas ar tādu pašu nosaukumu, bet atšķirīgiem parametriem. Funkciju pārslodzes gadījumā funkcija tiek definēta no jauna, izmantojot dažādu veidu vai argumentu skaitu. Tikai ar šīm atšķirībām kompilators var atšķirt funkcijas.
Funkcijas pārslodzes priekšrocība ir tā, ka tā palielina programmas lasāmību, jo vienai un tai pašai darbībai nav jāizmanto dažādi nosaukumi.
Piemērs: add() metodes argumentu skaita maiņa
C++
// program of function overloading when number of arguments> // vary> #include> using> namespace> std;> class> Cal {> public> :> > static> int> add(> int> a,> int> b) {> return> a + b; }> > static> int> add(> int> a,> int> b,> int> c)> > {> > return> a + b + c;> > }> };> int> main(> void> )> {> > Cal C;> // class object declaration.> > cout << C.add(10, 20) << endl;> > cout << C.add(12, 20, 23);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Izvade
30 55>
Laika sarežģītība: O(1)
Telpas sarežģītība: O(1)
Piemērs: ja atšķiras argumentu veids.
C++
// Program of function overloading with different types of> // arguments.> #include> using> namespace> std;> int> mul(> int> ,> int> );> float> mul(> float> ,> int> );> int> mul(> int> a,> int> b) {> return> a * b; }> float> mul(> double> x,> int> y) {> return> x * y; }> int> main()> {> > int> r1 = mul(6, 7);> > float> r2 = mul(0.2, 3);> > cout <<> 'r1 is : '> << r1 << endl;> > cout <<> 'r2 is : '> << r2 << endl;> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Izvade
r1 is : 42 r2 is : 0.6>
Laika sarežģītība: O(1)
Kosmosa sarežģītība: O(1)
Funkciju pārslodze un neskaidrība
Ja kompilators nevar izlemt, kura funkcija ir jāizsauc starp pārslogotajām funkcijām, šo situāciju sauc par funkciju pārslodzes neskaidrība.
Kad kompilators parāda neskaidrības kļūdu, kompilators nepalaiž programmu.
Neskaidrības cēloņi:
- Veids Conversion.
- Funkcija ar noklusējuma argumentiem.
- Funkcija ar garāmbraukšanas atsauci.
Veida pārveidošana: -
formāta virkne java
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> float> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> float> j)> {> > cout <<> 'Value of j is : '> << j << endl;> }> int> main()> {> > fun(12);> > fun(1.2);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Iepriekš minētais piemērs parāda kļūdu pārslodzes izsaukums “fun(double)” ir neskaidrs . Fun(10) izsauks pirmo funkciju. Fun(1.2) izsauc otro funkciju saskaņā ar mūsu prognozi. Bet tas neattiecas uz nevienu funkciju kā C++, visas peldošā komata konstantes tiek uzskatītas par dubultām, nevis kā pludiņiem. Ja pludiņu aizstājam ar dubultu, programma darbojas. Tāpēc šī ir tipa pārveide no peldošā uz dubulto.
Funkcija ar noklusējuma argumentiem: -
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> ,> int> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> int> a,> int> b = 9)> {> > cout <<> 'Value of a is : '> << a << endl;> > cout <<> 'Value of b is : '> << b << endl;> }> int> main()> {> > fun(12);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Iepriekš minētais piemērs parāda kļūdu pārslodzes izsaukums “fun(int)” ir neskaidrs . Fun(int a, int b=9) var izsaukt divos veidos: pirmkārt, izsaucot funkciju ar vienu argumentu, t.i., fun(12), un vēl viens veids ir izsaukt funkciju ar diviem argumentiem, t.i., fun(4 ,5). Fun(int i) funkcija tiek izsaukta ar vienu argumentu. Tāpēc kompilators nevarēja izvēlēties starp fun (int i) un fun (int a,int b=9).
Funkcija ar norādi “Pass By Reference”:
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> &);> int> main()> {> > int> a = 10;> > fun(a);> // error, which fun()?> > return> 0;> }> void> fun(> int> x) { cout <<> 'Value of x is : '> << x << endl; }> void> fun(> int> & b)> {> > cout <<> 'Value of b is : '> << b << endl;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Iepriekš minētais piemērs parāda kļūdu pārslodzes izsaukums “fun(int&)” ir neskaidrs . Pirmā funkcija izmanto vienu vesela skaitļa argumentu, bet otrā funkcija izmanto atsauces parametru kā argumentu. Šajā gadījumā kompilators nezina, kura funkcija ir nepieciešama lietotājam, jo nav sintaktiskas atšķirības starp fun (int) un fun (int &).
Drauga funkcija
- Drauga funkcija ir īpaša C++ funkcija, kurai, neskatoties uz to, ka tā nav klases dalībnieka funkcija, ir tiesības piekļūt privātiem un aizsargātiem klases datiem.
- Drauga funkcija ir funkcija, kas nav dalībnieka funkcija, vai parasta klases funkcija, kas tiek deklarēta, izmantojot atslēgvārdu draugs klasē. Pasludinot funkciju par draugu, funkcijai tiek piešķirtas visas piekļuves atļaujas.
- Atslēgvārds draugs tiek ievietots tikai funkcijas deklarācijā, bet ne funkcijas definīcijā.
- Kad tiek izsaukta drauga funkcija, netiek izmantots ne objekta nosaukums, ne punkta operators. Tomēr tas var pieņemt objektu kā argumentu, kura vērtībai tas vēlas piekļūt.
- Drauga funkciju var deklarēt jebkurā klases sadaļā, t.i., publiskā, privātā vai aizsargātā.
Drauga funkcijas deklarācija programmā C++
Sintakse:
class { friend (argument/s); };>
Piemērs_1: Atrodiet lielāko no diviem skaitļiem, izmantojot drauga funkciju
C++
java apgriešanas virkne
#include> using> namespace> std;> class> Largest {> > int> a, b, m;> public> :> > void> set_data();> > friend> void> find_max(Largest);> };> void> Largest::set_data()> {> > cout <<> 'Enter the first number : '> ;> > cin>> a;> > cout <<> '
Enter the second number : '> ;> > cin>> b;> }> void> find_max(Largest t)> {> > if> (t.a>t.b)> > t.m = t.a;> > else> > t.m = t.b;> > cout <<> '
Largest number is '> << t.m;> }> int> main()> {> > Largest l;> > l.set_data();> > find_max(l);> > return> 0;> }> |
>
>
Izvade
Enter the first number : 789 Enter the second number : 982 Largest number is 982>