logo

Funkcijos C++

Funkcija yra teiginių rinkinys, kuris priima įvestį, atlieka tam tikrus skaičiavimus, ir gamina produkciją. Idėja yra įdėti kai kuriuos dažnai arba pakartotinai kartu atliko užduotis, kad a funkcija kad užuot rašę tą patį kodą vėl ir vėl skirtingiems įvestims, galėtume iškviesti šią funkciją.
Paprastais žodžiais tariant, funkcija yra kodo blokas, kuris veikia tik tada, kai ji iškviečiama.

Sintaksė:



Funkcijos sintaksė

Funkcijos sintaksė

Pavyzdys:

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;> }>

>

>

Išvestis

m is 20>

Laiko sudėtingumas: O(1)

Erdvės sudėtingumas: O(1)

Kodėl mums reikalingos funkcijos?

  • Funkcijos mums padeda kodo dubliavimo mažinimas . Jei funkcionalumas vykdomas keliose programinės įrangos vietose, užuot rašę tą patį kodą, vėl ir vėl sukuriame funkciją ir iškviečiame ją visur. Tai taip pat padeda atlikti techninę priežiūrą, nes, jei ateityje pakeisime funkcionalumą, turime atlikti pakeitimus tik vienoje vietoje.
  • Funkcijos sukuria kodą modulinis . Apsvarstykite didelį failą, kuriame yra daug kodo eilučių. Skaityti ir naudoti kodą tampa tikrai paprasta, jei kodas yra padalintas į funkcijas.
  • Funkcijos suteikia abstrakcija . Pavyzdžiui, galime naudotis bibliotekos funkcijomis nesijaudindami dėl jų vidinio darbo.

Funkcijos deklaracija

Funkcijos deklaracija praneša kompiliatoriui apie parametrų skaičių, parametrų duomenų tipus ir grąžina funkcijos tipą. Parametrų pavadinimų rašymas funkcijos deklaracijoje yra neprivalomas, tačiau juos būtina įtraukti į apibrėžimą. Žemiau pateikiamas funkcijų deklaracijų pavyzdys. (parametrų pavadinimai toliau pateiktose deklaracijose nėra)

Funkcijos deklaracija C++

Funkcijos deklaracija

Pavyzdys:

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>);>

>

>

Funkcijų tipai

Funkcijų tipai C++

Funkcijų tipai C++

Vartotojo nustatyta funkcija

Vartotojo nustatytos funkcijos yra vartotojo / kliento apibrėžti kodo blokai, specialiai pritaikyti siekiant sumažinti didelių programų sudėtingumą. Jie taip pat plačiai žinomi kaip pritaikytos funkcijos kurie sukurti tik tam, kad patenkintų sąlygas, kuriomis vartotojas susiduria su problemomis, tuo pačiu sumažinant visos programos sudėtingumą.

Bibliotekos funkcija

Taip pat vadinamos bibliotekos funkcijos įmontuotos funkcijos . Šios funkcijos yra jau apibrėžto kompiliatoriaus paketo dalis, kurią sudaro speciali funkcija, turinti specialias ir skirtingas reikšmes. Integruota funkcija suteikia mums pranašumą, nes galime jas naudoti tiesiogiai jų neapibrėždami, o vartotojo apibrėžtoje funkcijoje turime deklaruoti ir apibrėžti funkciją prieš jas naudodami.
Pavyzdžiui: sqrt (), setw (), strcat () ir kt.

Parametrų perdavimas į funkcijas

Iškviečiami funkcijai perduoti parametrai faktiniai parametrai . Pavyzdžiui, toliau pateiktoje programoje 5 ir 10 yra tikrieji parametrai.
Iškviečiami funkcijos gauti parametrai formalūs parametrai . Pavyzdžiui, aukščiau pateiktoje programoje x ir y yra formalūs parametrai.

Formalus parametras ir tikrasis parametras C++

Formalus parametras ir faktinis parametras

Yra du populiariausi parametrų perdavimo būdai:

  1. Praeiti pagal vertę: Taikant šį parametrų perdavimo metodą, faktinių parametrų reikšmės nukopijuojamos į formalius funkcijos parametrus. Faktiniai ir formalūs parametrai yra saugomi skirtingose ​​atminties vietose, todėl bet kokie funkcijų pakeitimai neatsispindi faktiniuose skambinančiojo parametruose.
  2. Praeiti nuoroda: Tiek faktiniai, tiek formalūs parametrai nurodo tas pačias vietas, todėl bet kokie funkcijos viduje atlikti pakeitimai atsispindi faktiniuose skambinančiojo parametruose.

Funkcijos apibrėžimas

Praeiti pagal vertę naudojamas, kai x reikšmė nekeičiama naudojant funkciją 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;> }>

>

>

java cast string į int
Išvestis

x = 20>

Laiko sudėtingumas: O(1)

Erdvės sudėtingumas: O(1)

Funkcijos naudojant rodykles

Funkcija fun() tikisi, kad rodyklė ptr į sveikąjį skaičių (arba sveikojo skaičiaus adresą). Jis pakeičia reikšmę adresu ptr. Nuorodos operatorius * naudojamas norint pasiekti vertę adresu. Teiginyje „*ptr = 30“ reikšmė adresu ptr pakeičiama į 30. Adreso operatorius & naudojamas norint gauti bet kokio tipo duomenų kintamojo adresą. Funkcijos iškvietimo sakinyje „fun(&x)“ perduodamas x adresas, kad x būtų galima pakeisti naudojant jo adresą.

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;> }>

>

>

Išvestis

x = 30>

Laiko sudėtingumas: O(1)

Erdvės sudėtingumas: O(1)

Skirtumas tarp skambučio pagal vertę ir skambučio pagal nuorodą C++

Skambinti pagal vertę Skambinti pagal nuorodą
Vertės kopija perduodama funkcijai Vertės adresas perduodamas funkcijai
Funkcijos viduje atlikti pakeitimai nėra
atsispindi kitose funkcijose
Atsispindi funkcijos viduje atlikti pakeitimai
taip pat už funkcijos ribų
Faktiniai ir formalūs argumentai bus sukurti
skirtinga atminties vieta
Faktiniai ir formalūs argumentai bus sukurti
ta pati atminties vieta.

Ką reikia prisiminti apie C++ funkcijas

1. Dauguma C++ programų turi funkciją, vadinamą main(), kurią iškviečia operacinė sistema, kai vartotojas paleidžia programą.

2. Kiekviena funkcija turi grąžinimo tipą. Jei funkcija negrąžina jokios reikšmės, kaip grąžinimo tipas naudojamas void. Be to, jei funkcijos grąžinimo tipas yra negaliojantis, funkcijos apibrėžimo tekste vis tiek galime naudoti teiginį return, nenurodydami su juo jokios konstantos, kintamojo ir pan., paminėdami tik sakinį 'return;'. simbolizuoja funkcijos pabaigą, kaip parodyta toliau:

C++




void> function name(>int> a)> {> >.......>// Function Body> >return>;>// Function execution would get terminated> }>

>

Linux pervardyti katalogą
>

3. Norėdami deklaruoti funkciją, kurią galima iškviesti tik be jokių parametrų, turėtume naudoti tuščia pramoga (tuščia) . Pastaba: C++ kalboje tuščias sąrašas reiškia, kad funkciją galima iškviesti tik be jokių parametrų. C++ ir void fun() ir void fun(void) yra vienodi.

Pagrindinė funkcija

Pagrindinė funkcija yra speciali funkcija. Kiekvienoje C++ programoje turi būti funkcija, pavadinta main. Jis naudojamas kaip programos įėjimo taškas. Kompiuteris pradės vykdyti kodą nuo pagrindinės funkcijos pradžios.

Pagrindinių funkcijų tipai

1. Be parametrų:

CPP




// Without Parameters> int> main() { ...>return> 0; }>

>

>

2. Su parametrais:

CPP




// With Parameters> int> main(>int> argc,>char>*>const> argv[]) { ...>return> 0; }>

>

>

Pagrindinės funkcijos parametro parinkties priežastis yra leisti įvestis iš komandinės eilutės. Kai naudojate pagrindinę funkciją su parametrais, kiekviena simbolių grupė (atskirta tarpu) po programos pavadinimo išsaugoma kaip elementai masyve, pavadintame argv .
Kadangi pagrindinė funkcija turi grąžinimo tipą tarpt , programuotojas visada turi turėti grąžinimo teiginį kode. Grąžinamas numeris naudojamas informuoti iškviečiančią programą, koks buvo programos vykdymo rezultatas. Grąžinus 0 signalizuoja, kad problemų nebuvo.

C++ rekursija

Kai funkcija iškviečiama toje pačioje funkcijoje, C++ kalboje ji vadinama rekursija. Funkcija, kuri iškviečia tą pačią funkciją, yra žinoma kaip rekursinė funkcija.
Funkcija, kuri iškviečia save ir neatlieka jokios užduoties po funkcijos iškvietimo, yra žinoma kaip uodegos rekursija. Uodegos rekursijoje tą pačią funkciją paprastai vadiname su return sakiniu.
Sintaksė:

C++




recursionfunction()> {> >recursionfunction();>// calling self function> }>

>

>

Norėdami sužinoti daugiau, žr Šis straipsnis .

C++ masyvo perdavimas funkcijai

C++, norėdami pakartotinai panaudoti masyvo logiką, galime sukurti funkciją. Norėdami perduoti masyvą funkcijai C++, turime pateikti tik masyvo pavadinimą.

function_name(array_name[]);   //passing array to function>

Pavyzdys: išspausdinkite minimalų skaičių duotame masyve.

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>

romėniškų skaitmenų diagrama 1100

>

>

Išvestis

Minimum element is: 10>

Laiko sudėtingumas: O(n) kur n yra masyvo dydis
Erdvės sudėtingumas: O(n) kur n yra masyvo dydis.

C++ perkrovimas (funkcija)

Jei sukuriame du ar daugiau narių, turinčių tą patį pavadinimą, bet skiriasi parametrų skaičiumi ar tipu, tai vadinama C++ perkrovimu. C++ kalboje galime perkrauti:

  • metodai,
  • konstruktoriai ir
  • indeksuotos savybės

C++ perkrovos tipai yra šie:

  • Funkcijų perkrovimas
  • Operatoriaus perkrova

C++ funkcijų perkrovimas

Funkcijų perkrovimas apibrėžiamas kaip dviejų ar daugiau funkcijų su tuo pačiu pavadinimu, bet skirtingais parametrais procesas. Perkraunant funkciją, funkcija iš naujo apibrėžiama naudojant skirtingus argumentų tipus arba skaičių. Tik pagal šiuos skirtumus kompiliatorius gali atskirti funkcijas.
Funkcijos perkrovimo pranašumas yra tas, kad tai padidina programos skaitomumą, nes nereikia naudoti skirtingų pavadinimų tam pačiam veiksmui.

Pavyzdys: metodo add() argumentų skaičiaus keitimas

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>

>

>

Išvestis

30 55>

Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(1)

Pavyzdys: kai skiriasi argumentų tipas.

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>

>

>

Išvestis

r1 is : 42 r2 is : 0.6>

Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(1)

Funkcijų perkrova ir dviprasmiškumas

Kai kompiliatorius negali nuspręsti, kuri funkcija turi būti iškviesta tarp perkrautų funkcijų, ši situacija vadinama funkcijų perkrovimo dviprasmiškumas.
Kai kompiliatorius parodo dviprasmiškumo klaidą, kompiliatorius nepaleidžia programos.

Neaiškumo priežastys:

  • Tipas Konversija.
  • Funkcija su numatytaisiais argumentais.
  • Funkcija su praėjimo nuoroda.

Tipo konversija: -

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>

>

>

Aukščiau pateiktame pavyzdyje rodoma klaida perkrauto skambutis „linksmas (double)“ yra dviprasmiškas . Pramogos(10) iškvies pirmąją funkciją. Fun(1.2) iškviečia antrąją funkciją pagal mūsų prognozę. Tačiau tai netaikoma jokiai funkcijai, kaip C++, visos slankiojo kablelio konstantos traktuojamos kaip dvigubos, o ne kaip plūduriuojančios. Jei pakeičiame float į double, programa veikia. Todėl tai yra tipo konvertavimas iš plūduriuojančio į dvigubą.

Funkcija su numatytaisiais argumentais: -

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>

>

>

Aukščiau pateiktame pavyzdyje rodoma klaida perkrauto skambutis „fun(int)“ yra dviprasmiškas . Fun(int a, int b=9) galima iškviesti dviem būdais: pirmiausia iškviečiant funkciją su vienu argumentu, t.y., fun(12), o kitas būdas yra iškviesti funkciją su dviem argumentais, ty fun(4 ,5). Fun(int i) funkcija iškviečiama vienu argumentu. Todėl kompiliatorius negalėjo pasirinkti iš fun (int i) ir fun (int a,int b=9).

Funkcija su nuoroda: -

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>

>

>

Aukščiau pateiktame pavyzdyje rodoma klaida perkrauto „fun(int&)“ iškvietimas yra dviprasmiškas . Pirmoji funkcija naudoja vieną sveikojo skaičiaus argumentą, o antroji funkcija naudoja atskaitos parametrą kaip argumentą. Šiuo atveju kompiliatorius nežino, kurios funkcijos reikia vartotojui, nes nėra sintaksinio skirtumo tarp fun(int) ir fun(int &).

Draugo funkcija

  • Draugo funkcija yra speciali C++ funkcija, kuri, nepaisant to, kad nėra klasės nario funkcija, turi privilegiją pasiekti privačius ir apsaugotus klasės duomenis.
  • Draugo funkcija yra nenario funkcija arba įprasta klasės funkcija, kuri deklaruojama naudojant raktinį žodį draugas klasėje. Paskelbus funkciją kaip draugu, funkcijai suteikiamos visos prieigos teisės.
  • Raktinis žodis draugas dedamas tik funkcijos deklaracijoje, bet ne funkcijos apibrėžime.
  • Kai iškviečiama draugo funkcija, nenaudojamas nei objekto pavadinimas, nei taško operatorius. Tačiau jis gali priimti objektą kaip argumentą, kurio vertę nori pasiekti.
  • Draugo funkcija gali būti deklaruojama bet kurioje klasės dalyje, ty viešoje, privačioje arba apsaugotoje.

Draugo funkcijos deklaracija C++

Sintaksė:

class {   friend (argument/s); };>

Pavyzdys_1: Raskite didžiausią iš dviejų skaičių naudodami draugo funkciją

C++




#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;> }>

>

>

bfs paieška

Išvestis

Enter the first number : 789 Enter the second number : 982 Largest number is 982>