Funktio on joukko lauseita, joka ottaa syötteen, suorittaa tietyn laskutoimituksen, ja tuottaa tulosta. Ajatuksena on laittaa joitain yleisesti tai toistuvasti tehneet tehtäviä yhdessä tehdäkseen a toiminto jotta voimme kutsua tätä funktiota sen sijaan, että kirjoittaisit samaa koodia uudestaan ja uudestaan eri tuloille.
Yksinkertaisesti sanottuna funktio on koodilohko, joka toimii vain, kun sitä kutsutaan.
Syntaksi:

Toiminnon syntaksi
Esimerkki:
C++
Vaihda käsky java
// 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;> }> |
>
>Lähtö
m is 20>
Aika monimutkaisuus: O(1)
Avaruuden monimutkaisuus: O(1)
Miksi tarvitsemme toimintoja?
- Toiminnot auttavat meitä vähentää koodin redundanssia . Jos toiminnallisuus suoritetaan useissa paikoissa ohjelmistossa, saman koodin kirjoittamisen sijaan luomme toiminnon uudelleen ja uudelleen ja kutsumme sitä kaikkialle. Tämä auttaa myös ylläpidossa, koska joudumme tekemään muutoksia vain yhteen paikkaan, jos teemme muutoksia toimivuuteen tulevaisuudessa.
- Funktiot muodostavat koodin modulaarinen . Harkitse suurta tiedostoa, jossa on useita koodirivejä. Koodin lukeminen ja käyttö on todella helppoa, jos koodi on jaettu funktioihin.
- Toiminnot tarjoavat abstraktio . Voimme esimerkiksi käyttää kirjaston toimintoja huolehtimatta niiden sisäisestä työstä.
Toimintoilmoitus
Funktiomääritys kertoo kääntäjälle parametrien lukumäärästä, parametrien tietotyypeistä ja palauttaa funktion tyypin. Parametrien nimien kirjoittaminen funktion määrittelyyn on valinnaista, mutta ne on laitettava määritelmään. Alla on esimerkki funktion määrittelyistä. (parametrien nimet eivät ole alla olevissa ilmoituksissa)

Toimintoilmoitus
Esimerkki:
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> );> |
>
>
Toimintojen tyypit

Toimintojen tyypit C++:ssa
Käyttäjän määrittämä toiminto
Käyttäjän määrittämät toiminnot ovat käyttäjän/asiakkaan määrittämiä koodilohkoja, jotka on erityisesti mukautettu vähentämään suurten ohjelmien monimutkaisuutta. Ne tunnetaan myös yleisesti nimellä räätälöityjä toimintoja jotka on rakennettu vain tyydyttämään tilanne, jossa käyttäjä kohtaa ongelmia ja samalla vähentää koko ohjelman monimutkaisuutta.
Kirjastotoiminto
Kirjastotoimintoja kutsutaan myös sisäänrakennetut toiminnot . Nämä funktiot ovat osa kääntäjäpakettia, joka on jo määritelty ja koostuu erikoisfunktiosta, jolla on erityisiä ja erilaisia merkityksiä. Sisäänrakennettu funktio antaa meille etua, koska voimme käyttää niitä suoraan määrittelemättä niitä, kun taas käyttäjän määrittämässä funktiossa meidän on ilmoitettava ja määriteltävä funktio ennen niiden käyttöä.
Esimerkiksi: sqrt(), setw(), strcat() jne.
Parametrien siirto funktioihin
Funktiolle välitetyt parametrit kutsutaan todelliset parametrit . Esimerkiksi alla olevassa ohjelmassa 5 ja 10 ovat todellisia parametreja.
Kutsutaan funktion vastaanottamia parametreja muodolliset parametrit . Esimerkiksi yllä olevassa ohjelmassa x ja y ovat muodollisia parametreja.

Muodollinen parametri ja todellinen parametri
Parametrien välittämiseen on kaksi suosituinta tapaa:
- Ohitusarvo: Tässä parametrien välitysmenetelmässä todellisten parametrien arvot kopioidaan funktion muodollisiin parametreihin. Todelliset ja muodolliset parametrit on tallennettu eri muistipaikkoihin, joten funktioihin tehdyt muutokset eivät heijastu soittajan todellisiin parametreihin.
- Läpi viite: Sekä todelliset että muodolliset parametrit viittaavat samoihin paikkoihin, joten kaikki funktion sisällä tehdyt muutokset näkyvät soittajan todellisissa parametreissa.
Toiminnon määritelmä
Ohita arvo käytetään, kun x:n arvoa ei muuteta fun()-funktiolla.
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;> }> |
>
valettu sql:ssä
>Lähtö
x = 20>
Aika monimutkaisuus: O(1)
Avaruuden monimutkaisuus: O(1)
Osoittimia käyttävät toiminnot
Funktio fun() odottaa osoittimen ptr:n kokonaislukuun (tai kokonaisluvun osoitteeseen). Se muuttaa arvoa osoitteessa ptr. Viittauksen poisto-operaattori * käytetään osoitteen arvon saamiseksi. Käskyssä '*ptr = 30' osoitteen ptr arvo muutetaan arvoon 30. Osoiteoperaattori & käytetään minkä tahansa tietotyypin muuttujan osoitteen saamiseksi. Funktiokutsulauseessa 'fun(&x)' välitetään x:n osoite, jotta x:ää voidaan muokata sen osoitteen avulla.
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;> }> |
>
>Lähtö
x = 30>
Aika monimutkaisuus: O(1)
Avaruuden monimutkaisuus: O(1)
Ero kutsun arvon ja kutsun viittauksen välillä C++:ssa
Soita arvon mukaan | Soita viitteellä |
---|---|
Kopio arvosta välitetään funktiolle | Arvon osoite välitetään funktiolle |
Toiminnon sisällä tehdyt muutokset eivät ole heijastuu muihin toimintoihin | Toiminnon sisällä tehdyt muutokset näkyvät myös toiminnon ulkopuolella |
Varsinaiset ja muodolliset argumentit luodaan klo eri muistipaikkaa | Varsinaiset ja muodolliset argumentit luodaan klo sama muistipaikka. |
Muistettavat asiat C++:n funktioista
1. Useimmissa C++-ohjelmissa on main()-niminen funktio, jota käyttöjärjestelmä kutsuu, kun käyttäjä suorittaa ohjelman.
2. Jokaisella funktiolla on palautustyyppi. Jos funktio ei palauta arvoa, palautustyyppinä käytetään voidia. Lisäksi, jos funktion paluutyyppi on void, voimme silti käyttää return-lausetta funktion määritelmän rungossa, kun sen kanssa ei määritetä vakioita, muuttujia tms. mainitsemalla vain 'return;'-käskyn symboloivat toiminnon päättymistä alla olevan kuvan mukaisesti:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. Selvittääksemme funktion, jota voidaan kutsua vain ilman mitään parametreja, meidän tulisi käyttää tyhjä huvi (tyhjä) . Sivuhuomautuksena C++:ssa tyhjä lista tarkoittaa, että funktiota voidaan kutsua vain ilman parametreja. C++:ssa sekä void fun() että void fun(void) ovat samat.
Päätoiminto
Päätoiminto on erikoistoiminto. Jokaisen C++-ohjelman tulee sisältää funktio nimeltä main. Se toimii ohjelman sisääntulopisteenä. Tietokone alkaa suorittaa koodia päätoiminnon alusta.
Päätoimintojen tyypit
1. Ilman parametreja:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. Parametreilla:
CPP
git push -komento
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
Syy siihen, että pääfunktiolle on parametrivaihtoehto, on sallia syöte komentoriviltä. Kun käytät pääfunktiota parametrien kanssa, se tallentaa jokaisen merkkiryhmän (välilyönnillä erotettuna) ohjelman nimen jälkeen elementteinä taulukossa nimeltä argv .
Koska pääfunktiolla on paluutyyppi int , ohjelmoijalla on aina oltava paluulause koodissa. Palautettavaa numeroa käytetään ilmoittamaan kutsuvalle ohjelmalle, mikä oli ohjelman suorituksen tulos. Palautus 0 osoittaa, ettei ongelmia ollut.
C++-rekursio
Kun funktiota kutsutaan saman funktion sisällä, sitä kutsutaan C++:ssa rekursioksi. Funktiota, joka kutsuu samaa funktiota, kutsutaan rekursiiviseksi funktioksi.
Funktiota, joka kutsuu itseään eikä suorita mitään tehtävää funktiokutsun jälkeen, kutsutaan häntärekursioksi. Tail-rekursiossa kutsumme yleensä samaa funktiota return-lauseella.
Syntaksi:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Jos haluat tietää lisää, katso Tämä artikkeli .
C++ Siirtää taulukon funktioon
C++:ssa voimme luoda funktion käyttääksemme taulukkologiikkaa uudelleen. Jotta voimme välittää taulukon funktiolle C++:ssa, meidän on annettava vain taulukon nimi.
function_name(array_name[]); //passing array to function>
Esimerkki: Tulosta miniminumero annetussa taulukossa.
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> |
>
>Lähtö
Minimum element is: 10>
Aika monimutkaisuus: O(n) missä n on taulukon koko
Avaruuden monimutkaisuus: O(n) missä n on taulukon koko.
C++ ylikuormitus (toiminto)
Jos luomme kaksi tai useampia jäseniä, joilla on sama nimi, mutta eri parametrien lukumäärä tai tyyppi, sitä kutsutaan C++-ylikuormitukseksi. C++:ssa voimme ylikuormittaa:
- menetelmät,
- rakentajat ja
- indeksoidut ominaisuudet
C++:n ylikuormitustyypit ovat:
- Toimintojen ylikuormitus
- Kuljettajan ylikuormitus
C++-toimintojen ylikuormitus
Funktioiden ylikuormitus määritellään prosessiksi, jossa on kaksi tai useampi funktio, joilla on sama nimi, mutta eri parametrit. Funktioiden ylikuormituksessa funktio määritellään uudelleen käyttämällä joko erityyppisiä tai useita argumentteja. Vain näiden erojen perusteella kääntäjä voi erottaa funktiot toisistaan.
Function overloadingin etuna on, että se lisää ohjelman luettavuutta, koska sinun ei tarvitse käyttää eri nimiä samalle toiminnolle.
Esimerkki: add()-metodin argumenttien lukumäärän muuttaminen
C++
hasseuraava java
// 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> |
>
>Lähtö
30 55>
Aika monimutkaisuus: O(1)
Avaruuden monimutkaisuus: O(1)
Esimerkki: kun argumenttien tyyppi vaihtelee.
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> |
>
>Lähtö
r1 is : 42 r2 is : 0.6>
Aika monimutkaisuus: O(1)
Tilan monimutkaisuus: O(1)
Toiminnan ylikuormitus ja epäselvyys
Kun kääntäjä ei pysty päättämään, mikä toiminto ylikuormitettujen funktioiden joukosta tulee kutsua, tämä tilanne tunnetaan nimellä toimintojen ylikuormitus epäselvyyttä.
Kun kääntäjä näyttää epäselvyysvirheen, kääntäjä ei suorita ohjelmaa.
Epäselvyyden syyt:
- Tyyppi muunnos.
- Funktio oletusargumenteilla.
- Toiminto ohitusviittauksella.
Tyyppimuunnos: -
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> |
>
>
Yllä oleva esimerkki näyttää virheen ylikuormitetun 'fun(double)' -kutsu on epäselvä . Fun(10) kutsuu ensimmäisen funktion. Fun(1.2) kutsuu toista funktiota ennustuksemme mukaan. Mutta tämä ei viittaa mihinkään funktioon kuten C++:ssa, kaikkia liukulukuvakioita käsitellään tuplapisteinä, ei kelluvina. Jos vaihdamme floatin kaksinkertaiseksi, ohjelma toimii. Siksi tämä on tyypin muunnos floatista tuplaan.
Toiminto oletusargumenteilla: -
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> |
>
>
Yllä oleva esimerkki näyttää virheen call of overloaded 'fun(int)' on epäselvä . Fun(int a, int b=9) voidaan kutsua kahdella tavalla: ensin kutsutaan funktiota yhdellä argumentilla, eli fun(12) ja toinen tapa on kutsua funktiota kahdella argumentilla, eli fun(4 ,5). Fun(int i) -funktiota kutsutaan yhdellä argumentilla. Tästä syystä kääntäjä ei voinut valita fun(int i) ja fun(int a,int b=9) välillä.
Toiminto ohitusviittauksella: -
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> |
>
>
Yllä oleva esimerkki näyttää virheen ylikuormitetun 'fun(int&)'n kutsu on epäselvä . Ensimmäinen funktio ottaa yhden kokonaislukuargumentin ja toinen funktio ottaa referenssiparametrin argumenttina. Tässä tapauksessa kääntäjä ei tiedä mitä funktiota käyttäjä tarvitsee, koska fun(int) ja fun(int &) välillä ei ole syntaktista eroa.
Ystävätoiminto
- Ystäväfunktio on C++:n erityinen toiminto, jolla on oikeus päästä käsiksi luokan yksityisiin ja suojattuihin tietoihin, vaikka se ei ole luokan jäsentoiminto.
- Ystäväfunktio on luokan ei-jäsenfunktio tai tavallinen funktio, joka määritellään luokan sisällä avainsanalla friend. Ilmoittamalla toiminnon ystäväksi, funktiolle annetaan kaikki käyttöoikeudet.
- Avainsana ystävä sijoitetaan vain funktion määrittelyyn, mutta ei funktiomääritykseen.
- Kun kaverifunktiota kutsutaan, objektin nimeä tai pisteoperaattoria ei käytetä. Se voi kuitenkin hyväksyä objektin argumenttina, jonka arvoa se haluaa käyttää.
- Ystäväfunktio voidaan ilmoittaa missä tahansa luokan osassa, eli julkinen, yksityinen tai suojattu.
Ystäväfunktion ilmoitus C++:ssa
Syntaksi:
class { friend (argument/s); };>
Esimerkki_1: Etsi suurin kahdesta luvusta ystäväfunktiolla
C++
nukkainen loki
#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;> }> |
>
>
Lähtö
Enter the first number : 789 Enter the second number : 982 Largest number is 982>