logo

Funktioner i C++

En funktion er et sæt af udsagn, der tager input, udfører en bestemt beregning, og producerer output. Ideen er at sætte nogle almindeligt eller gentagne gange lavet opgaver sammen for at lave en fungere så i stedet for at skrive den samme kode igen og igen for forskellige indgange, kan vi kalde denne funktion.
Enkelt sagt er en funktion en kodeblok, der kun kører, når den kaldes.

Syntaks:

Syntaks for funktion

Syntaks for funktion



Eksempel:

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

>

>

Produktion

m is 20>

Tidskompleksitet: O(1)

Rumkompleksitet: O(1)

Hvorfor har vi brug for funktioner?

  • Funktioner hjælper os med reducere koderedundans . Hvis funktionalitet udføres flere steder i softwaren, så i stedet for at skrive den samme kode, igen og igen, opretter vi en funktion og kalder den overalt. Dette hjælper også med vedligeholdelsen, da vi kun skal foretage ændringer ét sted, hvis vi fremover laver ændringer i funktionaliteten.
  • Funktioner laver kode modulopbygget . Overvej en stor fil med mange linjer kode. Det bliver rigtig nemt at læse og bruge koden, hvis koden er opdelt i funktioner.
  • Funktioner giver abstraktion . For eksempel kan vi bruge biblioteksfunktioner uden at bekymre os om deres interne arbejde.

Funktionserklæring

En funktionserklæring fortæller compileren om antallet af parametre, datatyper af parametre og returnerer funktionstypen. Det er valgfrit at skrive parameternavne i funktionsdeklarationen, men det er nødvendigt at sætte dem i definitionen. Nedenfor er et eksempel på funktionserklæringer. (parameternavne er ikke til stede i nedenstående erklæringer)

Funktionserklæring i C++

Funktionserklæring

Eksempel:

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

>

>

Typer af funktioner

Typer af funktioner i C++

Typer af funktioner i C++

Brugerdefineret funktion

Brugerdefinerede funktioner er bruger-/kundedefinerede kodeblokke, der er specielt tilpasset til at reducere kompleksiteten af ​​store programmer. De er også almindeligt kendt som skræddersyede funktioner som kun er bygget til at tilfredsstille den tilstand, hvor brugeren står over for problemer, samtidig med at kompleksiteten af ​​hele programmet reduceres.

Biblioteksfunktion

Biblioteksfunktioner kaldes også indbyggede funktioner . Disse funktioner er en del af en compilerpakke, der allerede er defineret og består af en speciel funktion med særlige og forskellige betydninger. Indbygget funktion giver os en fordel, da vi direkte kan bruge dem uden at definere dem, mens vi i den brugerdefinerede funktion skal erklære og definere en funktion, før vi bruger dem.
For eksempel: sqrt(), setw(), strcat() osv.

Parameteroverførsel til funktioner

De parametre, der sendes til funktionen, kaldes faktiske parametre . For eksempel, i programmet nedenfor, er 5 og 10 faktiske parametre.
De parametre, der modtages af funktionen, kaldes formelle parametre . For eksempel er x og y i ovenstående program formelle parametre.

Formel parameter og faktisk parameter i C++

Formel parameter og faktisk parameter

Der er to mest populære måder at videregive parametre på:

  1. Gå forbi værdi: I denne parameteroverførselsmetode kopieres værdier af faktiske parametre til funktionens formelle parametre. De faktiske og formelle parametre er gemt i forskellige hukommelsesplaceringer, så eventuelle ændringer i funktionerne afspejles ikke i de faktiske parametre for den, der ringer.
  2. Gå forbi reference: Både faktiske og formelle parametre refererer til de samme steder, så alle ændringer, der foretages inde i funktionen, afspejles i de faktiske parametre for den, der ringer.

Funktionsdefinition

Gå forbi værdi bruges, hvor værdien af ​​x ikke ændres ved hjælp af funktionen 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;> }>

>

>

Produktion

x = 20>

Tidskompleksitet: O(1)

låse en Android-app

Rumkompleksitet: O(1)

Funktioner ved hjælp af pointere

Funktionen fun() forventer en pointer ptr til et heltal (eller en adresse på et heltal). Det ændrer værdien på adressen ptr. Dereferenceoperatøren * bruges til at få adgang til værdien på en adresse. I sætningen '*ptr = 30' ændres værdien ved adresse ptr til 30. Adresseoperatøren & bruges til at få adressen på en variabel af enhver datatype. I funktionskaldssætningen 'sjov(&x)' videregives adressen på x, så x kan ændres ved hjælp af dens adresse.

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

>

>

Produktion

x = 30>

Tidskompleksitet: O(1)

Rumkompleksitet: O(1)

Forskellen mellem call by value og call by reference i C++

Kald efter værdi Ring efter reference
En kopi af værdien sendes til funktionen En adresse med værdi sendes til funktionen
Ændringer foretaget inde i funktionen er det ikke
reflekteret over andre funktioner
Ændringer foretaget inde i funktionen afspejles
også uden for funktionen
Faktiske og formelle argumenter vil blive oprettet kl
anden hukommelsesplacering
Faktiske og formelle argumenter vil blive oprettet kl
samme hukommelsesplacering.

Punkter at huske om funktioner i C++

1. De fleste C++-programmer har en funktion kaldet main(), som kaldes af operativsystemet, når en bruger kører programmet.

2. Hver funktion har en returtype. Hvis en funktion ikke returnerer nogen værdi, bruges void som en returtype. Desuden, hvis returtypen for funktionen er ugyldig, kan vi stadig bruge return-sætningen i funktionsdefinitionens brødtekst ved ikke at specificere nogen konstant, variabel osv. med den, ved kun at nævne 'return;'-sætningen, som ville symboliserer afslutningen af ​​funktionen som vist nedenfor:

C++




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

>

>

3. For at erklære en funktion, der kun kan kaldes uden nogen parameter, skal vi bruge void sjov (void) . Som en sidebemærkning, i C++ betyder en tom liste, at en funktion kun kan kaldes uden nogen parameter. I C++ er både void fun() og void fun(void) det samme.

Hovedfunktion

Hovedfunktionen er en speciel funktion. Hvert C++-program skal indeholde en funktion med navnet main. Det fungerer som indgangspunktet for programmet. Computeren vil begynde at køre koden fra begyndelsen af ​​hovedfunktionen.

Typer af hovedfunktioner

1. Uden parametre:

CPP




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

>

>

2. Med parametre:

CPP




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

>

>

Grunden til at have parameterindstillingen for hovedfunktionen er at tillade input fra kommandolinjen. Når du bruger hovedfunktionen med parametre, gemmer den hver gruppe af tegn (adskilt af et mellemrum) efter programnavnet som elementer i et array med navn argv .
Da hovedfunktionen har returtypen på int , skal programmøren altid have en retursætning i koden. Nummeret, der returneres, bruges til at informere det kaldende program om, hvad resultatet af programmets eksekvering var. At returnere 0 signalerer, at der ikke var nogen problemer.

C++ Rekursion

Når funktion kaldes inden for den samme funktion, er det kendt som rekursion i C++. Den funktion, der kalder den samme funktion, er kendt som rekursiv funktion.
En funktion, der kalder sig selv og ikke udfører nogen opgave efter funktionsopkald, er kendt som halerekursion. I halerekursion kalder vi generelt den samme funktion med retursætning.
Syntaks:

C++




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

>

>

For at vide mere se denne artikel .

C++ overfører array til funktion

I C++ kan vi oprette en funktion for at genbruge array-logikken. For at sende et array til en funktion i C++ skal vi kun angive arraynavnet.

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

Eksempel: Udskriv minimumsantallet i det givne array.

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>

>

>

Produktion

Minimum element is: 10>

Tidskompleksitet: O(n) hvor n er størrelsen af ​​arrayet
Rumkompleksitet: O(n) hvor n er størrelsen af ​​arrayet.

forårssky

C++ overbelastning (funktion)

Hvis vi opretter to eller flere medlemmer med samme navn, men forskellige i antal eller type af parametre, er det kendt som C++ overbelastning. I C++ kan vi overbelaste:

  • metoder,
  • konstruktører og
  • indekserede ejendomme

Typer af overbelastning i C++ er:

  • Funktion overbelastning
  • Operatør overbelastning

C++ Funktion Overbelastning

Funktionsoverbelastning er defineret som processen med at have to eller flere funktioner med samme navn, men forskellige parametre. Ved funktionsoverbelastning omdefineres funktionen ved at bruge enten forskellige typer eller antal argumenter. Det er kun gennem disse forskelle en compiler kan skelne mellem funktionerne.
Fordelen ved funktionsoverbelastning er, at det øger programmets læsbarhed, fordi du ikke behøver at bruge forskellige navne til den samme handling.

Eksempel: ændring af antallet af argumenter for add()-metoden

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>

>

>

Produktion

30 55>

Tidskompleksitet: O(1)
Rumkompleksitet: O(1)

Eksempel: når arten af ​​argumenterne varierer.

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>

>

>

Produktion

r1 is : 42 r2 is : 0.6>

Tidskompleksitet: O(1)
Rumkompleksitet: O(1)

Funktion Overbelastning og tvetydighed

Når compileren ikke er i stand til at bestemme, hvilken funktion der skal aktiveres blandt den overbelastede funktion, er denne situation kendt som funktionsoverbelastende tvetydighed.
Når compileren viser tvetydighedsfejlen, kører compileren ikke programmet.

Årsager til tvetydighed:

  • Typekonvertering.
  • Funktion med standardargumenter.
  • Funktion med pass-by-reference.

Typekonvertering:-

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>

>

>

Ovenstående eksempel viser en fejl kald af overbelastet 'sjov(dobbelt)' er tvetydig . Fun(10) kalder den første funktion. Fun(1.2) kalder den anden funktion ifølge vores forudsigelse. Men dette refererer ikke til nogen funktion som i C++, alle flydende kommakonstanter behandles som dobbelt, ikke som flydende. Hvis vi erstatter float til det dobbelte, virker programmet. Derfor er dette en typekonvertering fra float til double.

Funktion med standardargumenter:-

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>

>

>

Ovenstående eksempel viser en fejl kald af overbelastet 'sjov(int)' er tvetydig . Fun(int a, int b=9) kan kaldes på to måder: for det første ved at kalde funktionen med et argument, dvs. fun(12), og en anden måde er at kalde funktionen med to argumenter, dvs. fun(4) ,5). Fun(int i)-funktionen aktiveres med ét argument. Derfor kunne compileren ikke være i stand til at vælge mellem fun(int i) og fun(int a,int b=9).

Funktion med 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>

>

>

Ovenstående eksempel viser en fejl kald af overbelastet 'sjov(int&)' er tvetydig . Den første funktion tager et heltalsargument, og den anden funktion tager en referenceparameter som et argument. I dette tilfælde ved compileren ikke, hvilken funktion der er behov for af brugeren, da der ikke er nogen syntaktisk forskel mellem fun(int) og fun(int &).

Ven funktion

  • En vennefunktion er en speciel funktion i C++, som på trods af ikke at være medlem af en klasse har privilegiet til at få adgang til private og beskyttede data i en klasse.
  • En vennefunktion er en ikke-medlemsfunktion eller en almindelig funktion i en klasse, som erklæres ved at bruge nøgleordet ven inde i klassen. Ved at erklære en funktion som en ven, gives alle adgangstilladelser til funktionen.
  • Nøgleordet ven placeres kun i funktionsdeklarationen, men ikke i funktionsdefinitionen.
  • Når vennefunktionen kaldes, bruges hverken navnet på objektet eller prikoperatoren. Det kan dog acceptere objektet som et argument, hvis værdi den ønsker at få adgang til.
  • En vennefunktion kan erklæres i enhver sektion af klassen, dvs. offentlig, privat eller beskyttet.

Venneerklæringsfunktion i C++

Syntaks:

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

Eksempel_1: Find det største af to tal ved hjælp af Friend Function

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

>

>

Produktion

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