En funksjon er et sett med utsagn som tar inndata, gjør noen spesifikke beregninger, og produserer output. Tanken er å sette noen ofte eller gjentatte ganger gjort oppgaver sammen for å lage en funksjon slik at i stedet for å skrive den samme koden igjen og igjen for forskjellige innganger, kan vi kalle denne funksjonen.
Enkelt sagt er en funksjon en kodeblokk som bare kjøres når den kalles.
Syntaks:

Syntaks for funksjon
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;> }> |
>
>Produksjon
m is 20>
Tidskompleksitet: O(1)
Plass kompleksitet: O(1)
Hvorfor trenger vi funksjoner?
- Funksjoner hjelper oss inn redusere koderedundans . Hvis funksjonalitet utføres på flere steder i programvaren, i stedet for å skrive den samme koden, igjen og igjen, lager vi en funksjon og kaller den overalt. Dette hjelper også på vedlikeholdet da vi bare må gjøre endringer på ett sted hvis vi gjør endringer i funksjonaliteten i fremtiden.
- Funksjoner lager kode modulært . Tenk på en stor fil med mange linjer med kode. Det blir veldig enkelt å lese og bruke koden, hvis koden er delt inn i funksjoner.
- Funksjoner gir abstraksjon . For eksempel kan vi bruke bibliotekfunksjoner uten å bekymre oss for deres interne arbeid.
Funksjonserklæring
En funksjonserklæring forteller kompilatoren om antall parametere, datatyper av parametere og returnerer funksjonstype. Det er valgfritt å skrive parameternavn i funksjonsdeklarasjonen, men det er nødvendig å sette dem inn i definisjonen. Nedenfor er et eksempel på funksjonserklæringer. (parameternavn er ikke til stede i erklæringene nedenfor)

Funksjonserklæ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 funksjoner

Typer funksjoner i C++
Brukerdefinert funksjon
Brukerdefinerte funksjoner er bruker-/kundedefinerte kodeblokker spesielt tilpasset for å redusere kompleksiteten til store programmer. De er også kjent som skreddersydde funksjoner som er bygget kun for å tilfredsstille tilstanden der brukeren står overfor problemer, samtidig som de reduserer kompleksiteten til hele programmet.
Bibliotek funksjon
Bibliotekfunksjoner kalles også innebygde funksjoner . Disse funksjonene er en del av en kompilatorpakke som allerede er definert og består av en spesiell funksjon med spesielle og forskjellige betydninger. Innebygd funksjon gir oss en fordel ettersom vi kan bruke dem direkte uten å definere dem, mens vi i den brukerdefinerte funksjonen må deklarere og definere en funksjon før vi bruker dem.
For eksempel: sqrt(), setw(), strcat() osv.
Parameteroverføring til funksjoner
Parametrene som sendes til funksjonen kalles faktiske parametere . For eksempel, i programmet nedenfor, er 5 og 10 faktiske parametere.
Parametrene som mottas av funksjonen kalles formelle parametere . For eksempel, i programmet ovenfor er x og y formelle parametere.

Formell parameter og faktisk parameter
Det er to mest populære måter å sende parametere på:
- Pass av verdi: I denne parameteroverføringsmetoden kopieres verdiene til faktiske parametere til funksjonens formelle parametere. De faktiske og formelle parameterne er lagret på forskjellige minneplasseringer, slik at eventuelle endringer i funksjonene ikke reflekteres i de faktiske parameterne til den som ringer.
- Gå forbi referanse: Både faktiske og formelle parametere refererer til de samme plasseringene, så eventuelle endringer som gjøres inne i funksjonen reflekteres i de faktiske parameterne til den som ringer.
Funksjonsdefinisjon
Pass av verdi brukes der verdien av x ikke endres ved hjelp av funksjonen 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;> }> |
>
>Produksjon
x = 20>
Tidskompleksitet: O(1)
skrive ut fra java
Plass kompleksitet: O(1)
Funksjoner ved hjelp av pekere
Funksjonen fun() forventer en peker ptr til et heltall (eller en adresse til et heltall). Den endrer verdien på adressen ptr. Dereferanseoperatøren * brukes for å få tilgang til verdien på en adresse. I setningen '*ptr = 30' endres verdien ved adressen ptr til 30. Adresseoperatøren & brukes til å få adressen til en variabel av en hvilken som helst datatype. I funksjonsanropssetningen 'fun(&x)' sendes adressen til x slik at x kan endres ved hjelp av adressen.
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;> }> |
>
>Produksjon
x = 30>
Tidskompleksitet: O(1)
Plass kompleksitet: O(1)
Forskjellen mellom call by value og call by reference i C++
Ring etter verdi | Ring ved referanse |
---|---|
En kopi av verdien sendes til funksjonen | En verdiadresse sendes til funksjonen |
Endringer gjort inne i funksjonen er det ikke reflektert over andre funksjoner | Endringer i funksjonen gjenspeiles også utenfor funksjonen |
Faktiske og formelle argumenter vil bli opprettet kl annen minneplassering | Faktiske og formelle argumenter vil bli opprettet kl samme minneplassering. |
Poeng å huske om funksjoner i C++
1. De fleste C++-programmer har en funksjon kalt main() som kalles opp av operativsystemet når en bruker kjører programmet.
2. Hver funksjon har en returtype. Hvis en funksjon ikke returnerer noen verdi, brukes void som en returtype. Dessuten, hvis returtypen til funksjonen er ugyldig, kan vi fortsatt bruke retursetningen i funksjonsdefinisjonen ved å ikke spesifisere noen konstant, variabel osv. med den, ved kun å nevne 'retur;'-setningen som ville symboliserer avslutningen av funksjonen som vist nedenfor:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. For å deklarere en funksjon som bare kan kalles uten noen parameter, bør vi bruke void moro(void) . Som en sidenotat, i C++, betyr en tom liste at en funksjon bare kan kalles uten noen parameter. I C++ er både void fun() og void fun(void) like.
Hovedfunksjon
Hovedfunksjonen er en spesiell funksjon. Hvert C++-program må inneholde en funksjon kalt main. Det fungerer som inngangspunkt for programmet. Datamaskinen vil begynne å kjøre koden fra begynnelsen av hovedfunksjonen.
Typer hovedfunksjoner
1. Uten parametere:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. Med parametere:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
Grunnen til å ha parameteralternativet for hovedfunksjonen er å tillate inndata fra kommandolinjen. Når du bruker hovedfunksjonen med parametere, lagrer den hver gruppe med tegn (atskilt med et mellomrom) etter programnavnet som elementer i en matrise med navn argv .
Siden hovedfunksjonen har returtypen på int , må programmereren alltid ha en retursetning i koden. Nummeret som returneres brukes til å informere det oppringende programmet hva resultatet av programmets kjøring var. Å returnere 0 signaliserer at det ikke var noen problemer.
C++ rekursjon
Når funksjon kalles innenfor samme funksjon, er den kjent som rekursjon i C++. Funksjonen som kaller den samme funksjonen, er kjent som rekursiv funksjon.
En funksjon som kaller seg selv, og som ikke utfører noen oppgave etter funksjonsanrop, er kjent som halerekursjon. I halerekursjon kaller vi vanligvis den samme funksjonen med retursetning.
Syntaks:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
For å vite mer se denne artikkelen .
C++ sender array til funksjon
I C++, for å gjenbruke array-logikken, kan vi lage en funksjon. For å sende en matrise til en funksjon i C++, må vi bare oppgi matrisenavnet.
function_name(array_name[]); //passing array to function>
Eksempel: Skriv ut minimumstallet i den gitte matrisen.
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> |
>
>Produksjon
Minimum element is: 10>
Tidskompleksitet: O(n) hvor n er størrelsen på matrisen
Plass kompleksitet: O(n) hvor n er størrelsen på matrisen.
vårsky
C++ overbelastning (funksjon)
Hvis vi oppretter to eller flere medlemmer med samme navn, men forskjellige i antall eller type parametere, er det kjent som C++-overbelastning. I C++ kan vi overbelaste:
- metoder,
- konstruktører og
- indekserte egenskaper
Typer overbelastning i C++ er:
- Funksjon overbelastning
- Operatør overbelastning
C++ funksjon overbelastning
Funksjonsoverbelastning er definert som prosessen med å ha to eller flere funksjoner med samme navn, men forskjellige parametere. Ved funksjonsoverbelastning blir funksjonen redefinert ved å bruke enten forskjellige typer eller antall argumenter. Det er bare gjennom disse forskjellene en kompilator kan skille mellom funksjonene.
Fordelen med funksjonsoverbelastning er at det øker lesbarheten til programmet fordi du ikke trenger å bruke forskjellige navn for samme handling.
Eksempel: endre antall 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> |
>
>Produksjon
30 55>
Tidskompleksitet: O(1)
Plass kompleksitet: O(1)
Eksempel: når typen av argumentene 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> |
>
>Produksjon
r1 is : 42 r2 is : 0.6>
Tidskompleksitet: O(1)
Plass kompleksitet: O(1)
Funksjon Overbelastning og tvetydighet
Når kompilatoren ikke er i stand til å bestemme hvilken funksjon som skal påkalles blant den overbelastede funksjonen, er denne situasjonen kjent som funksjon overbelastning tvetydighet.
Når kompilatoren viser tvetydighetsfeilen, kjører ikke kompilatoren programmet.
Årsaker til tvetydighet:
- Type konvertering.
- Funksjon med standardargumenter.
- Funksjon med pass-by-referanse.
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> |
>
>
Eksempelet ovenfor viser en feil kallet av overbelastet 'moro(dobbel)' er tvetydig . Fun(10) vil kalle den første funksjonen. Fun(1.2) kaller den andre funksjonen i henhold til vår prediksjon. Men dette refererer ikke til noen funksjon som i C++, alle flytepunktkonstantene blir behandlet som doble ikke som en flyte. Hvis vi bytter float til dobbel, fungerer programmet. Derfor er dette en typekonvertering fra float til dobbel.
Funksjon 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> |
>
>
Eksempelet ovenfor viser en feil kallet av overbelastet 'moro(int)' er tvetydig . Fun(int a, int b=9) kan kalles på to måter: først ved å kalle funksjonen med ett argument, dvs. fun(12) og en annen måte er å kalle funksjonen med to argumenter, dvs. fun(4) ,5). Fun(int i)-funksjonen påkalles med ett argument. Derfor kunne ikke kompilatoren velge mellom fun(int i) og fun(int a,int b=9).
Funksjon 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> |
>
>
Eksempelet ovenfor viser en feil kallet med overbelastet 'moro(int&)' er tvetydig . Den første funksjonen tar ett heltallsargument og den andre funksjonen tar en referanseparameter som et argument. I dette tilfellet vet ikke kompilatoren hvilken funksjon brukeren trenger, da det ikke er noen syntaktisk forskjell mellom fun(int) og fun(int &).
vennefunksjon
- En vennefunksjon er en spesiell funksjon i C++ som til tross for at den ikke er medlem av en klasse har privilegiet til å få tilgang til private og beskyttede data til en klasse.
- En vennefunksjon er en ikke-medlemsfunksjon eller en vanlig funksjon i en klasse, som er deklarert ved å bruke nøkkelordet venn inne i klassen. Ved å erklære en funksjon som en venn, gis alle tilgangstillatelsene til funksjonen.
- Nøkkelordet venn plasseres kun i funksjonsdeklarasjonen, men ikke i funksjonsdefinisjonen.
- Når vennefunksjonen kalles, brukes verken navnet på objektet eller punktoperatoren. Imidlertid kan den godta objektet som et argument hvis verdi den ønsker tilgang til.
- En vennefunksjon kan erklæres i hvilken som helst del av klassen, dvs. offentlig, privat eller beskyttet.
Venneerklæringsfunksjon i C++
Syntaks:
class { friend (argument/s); };>
Eksempel_1: Finn det største av to tall ved å bruke vennefunksjonen
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;> }> |
>
>
Produksjon
Enter the first number : 789 Enter the second number : 982 Largest number is 982>