logo

Funkcijas programmā C++

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

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)

Funkciju deklarācija C++ valodā

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

C++ 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 valodā C++

Formālais parametrs un faktiskais parametrs

Ir divi populārākie parametru nodošanas veidi:

  1. 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.
  2. 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>