Una funció és un conjunt de sentències que pren entrada, fa algun càlcul específic, i produeix sortida. La idea és posar-ne alguna de manera habitual o repetida fet tasques junts per fer a funció de manera que en lloc d'escriure el mateix codi una vegada i una altra per a diferents entrades, podem cridar aquesta funció.
En termes senzills, una funció és un bloc de codi que només s'executa quan es crida.
Sintaxi:

Sintaxi de la funció
Exemple:
C++
connexió java mysql
// 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>i)> > 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;> }> |
>
>Sortida
m is 20>
Complexitat temporal: O(1)
Complexitat espacial: O(1)
Per què necessitem funcions?
- Les funcions ens ajuden a entrar reduir la redundància del codi . Si la funcionalitat es realitza en diversos llocs del programari, en lloc d'escriure el mateix codi, una i altra vegada, creem una funció i l'anomenem a tot arreu. Això també ajuda en el manteniment, ja que només hem de fer canvis en un lloc si fem canvis a la funcionalitat en el futur.
- Les funcions fan codi modular . Penseu en un fitxer gran amb moltes línies de codi. Es fa molt senzill llegir i utilitzar el codi, si el codi es divideix en funcions.
- Les funcions proporcionen abstracció . Per exemple, podem utilitzar les funcions de la biblioteca sense preocupar-nos pel seu treball intern.
Declaració de funció
Una declaració de funció informa al compilador sobre el nombre de paràmetres, els tipus de dades de paràmetres i retorna el tipus de funció. Escriure noms de paràmetres a la declaració de funció és opcional però cal posar-los a la definició. A continuació es mostra un exemple de declaracions de funcions. (els noms dels paràmetres no estan presents a les declaracions següents)

Declaració de funció
Exemple:
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> );> |
>
>
Tipus de Funcions

Tipus de funcions en C++
Funció definida per l'usuari
Les funcions definides per l'usuari són blocs de codi definits per l'usuari/client especialment personalitzats per reduir la complexitat dels grans programes. També es coneixen comunament com funcions a mida que es construeixen només per satisfer la condició en què l'usuari s'enfronta a problemes, alhora que redueixen la complexitat de tot el programa.
Funció de biblioteca
També s'anomenen funcions de biblioteca Funcions integrades . Aquestes funcions formen part d'un paquet compilador que ja està definit i consisteix en una funció especial amb significats especials i diferents. La funció integrada ens dóna un avantatge, ja que les podem utilitzar directament sense definir-les, mentre que a la funció definida per l'usuari hem de declarar i definir una funció abans d'utilitzar-les.
Per exemple: sqrt(), setw(), strcat(), etc.
Passació de paràmetres a funcions
Es criden els paràmetres passats a la funció paràmetres reals . Per exemple, al programa següent, 5 i 10 són paràmetres reals.
Es criden els paràmetres rebuts per la funció paràmetres formals . Per exemple, al programa anterior, x i y són paràmetres formals.

Paràmetre formal i paràmetre real
Hi ha dues maneres més populars de passar paràmetres:
- Passa per valor: En aquest mètode de pas de paràmetres, els valors dels paràmetres reals es copien als paràmetres formals de la funció. Els paràmetres reals i formals s'emmagatzemen en diferents ubicacions de memòria, de manera que els canvis fets a les funcions no es reflecteixen en els paràmetres reals de la persona que truca.
- Passa per referència: Tant els paràmetres reals com els formals fan referència a les mateixes ubicacions, de manera que els canvis fets dins de la funció es reflecteixen en els paràmetres reals de la persona que truca.
Definició de la funció
Passar per valor s'utilitza quan el valor de x no es modifica mitjançant la funció 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;> }> |
>
somni de cop
>Sortida
x = 20>
Complexitat temporal: O(1)
Complexitat espacial: O(1)
Funcions amb punters
La funció fun() espera un punter ptr a un nombre enter (o una adreça d'un nombre enter). Modifica el valor a l'adreça ptr. L'operador de desreferència * s'utilitza per accedir al valor en una adreça. A la instrucció '*ptr = 30', el valor de l'adreça ptr es canvia a 30. L'operador d'adreça & s'utilitza per obtenir l'adreça d'una variable de qualsevol tipus de dades. A la declaració de trucada de funció 'fun(&x)', es passa l'adreça de x perquè es pugui modificar x utilitzant la seva adreça.
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;> }> |
>
>Sortida
x = 30>
Complexitat temporal: O(1)
Complexitat espacial: O(1)
Diferència entre trucada per valor i trucada per referència en C++
Crida per valor | Trucar per referència |
---|---|
Es passa una còpia del valor a la funció | Es passa una adreça de valor a la funció |
Els canvis fets dins de la funció no ho són reflectit en altres funcions | Els canvis realitzats dins de la funció es reflecteixen també fora de la funció |
Els arguments reals i formals es crearan a ubicació de memòria diferent | Els arguments reals i formals es crearan a mateixa ubicació de memòria. |
Aspectes a recordar sobre les funcions en C++
1. La majoria dels programes C++ tenen una funció anomenada main() que el sistema operatiu crida quan un usuari executa el programa.
2. Cada funció té un tipus de retorn. Si una funció no retorna cap valor, s'utilitza void com a tipus de retorn. A més, si el tipus de retorn de la funció és nul, encara podem utilitzar la instrucció de retorn al cos de la definició de la funció sense especificar-hi cap constant, variable, etc., només esmentant la instrucció 'return;' simbolitza la terminació de la funció tal com es mostra a continuació:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. Per declarar una funció que només es pot cridar sense cap paràmetre, hauríem d'utilitzar buit diversió (buit) . Com a nota al marge, en C++, una llista buida significa que només es pot cridar una funció sense cap paràmetre. En C++, tant void fun() com void fun(void) són iguals.
Funció principal
La funció principal és una funció especial. Cada programa C++ ha de contenir una funció anomenada main. Serveix com a punt d'entrada al programa. L'ordinador començarà a executar el codi des de l'inici de la funció principal.
Tipus de funcions principals
1. Sense paràmetres:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. Amb paràmetres:
CPP
alisa manyonok
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
El motiu per tenir l'opció de paràmetre per a la funció principal és permetre l'entrada des de la línia d'ordres. Quan utilitzeu la funció principal amb paràmetres, desa cada grup de caràcters (separats per un espai) després del nom del programa com a elements en una matriu anomenada argv .
Com que la funció principal té el tipus de retorn de int , el programador sempre ha de tenir una instrucció de retorn al codi. El número que es retorna s'utilitza per informar al programa trucant quin va ser el resultat de l'execució del programa. Tornar 0 senyals que no hi ha hagut problemes.
Recursió C++
Quan es crida una funció dins de la mateixa funció, es coneix com a recursivitat en C++. La funció que crida a la mateixa funció es coneix com a funció recursiva.
Una funció que es crida a si mateixa i no realitza cap tasca després de la trucada de funció, es coneix com a recursivitat de la cua. En recursivitat de cua, generalment anomenem la mateixa funció amb declaració return.
Sintaxi:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Per saber-ne més veure Aquest article .
C++ que passa la matriu a la funció
En C++, per reutilitzar la lògica de la matriu, podem crear una funció. Per passar una matriu a una funció en C++, només hem de proporcionar el nom de la matriu.
function_name(array_name[]); //passing array to function>
Exemple: imprimiu el número mínim a la matriu donada.
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> |
>
>Sortida
Minimum element is: 10>
Complexitat temporal: O(n) on n és la mida de la matriu
Complexitat espacial: O(n) on n és la mida de la matriu.
Sobrecàrrega de C++ (funció)
Si creem dos o més membres amb el mateix nom però diferents en nombre o tipus de paràmetres, es coneix com a sobrecàrrega de C++. En C++, podem sobrecarregar:
- mètodes,
- constructors i
- propietats indexades
Els tipus de sobrecàrrega en C++ són:
- Sobrecàrrega de funcions
- Sobrecàrrega de l'operador
Sobrecàrrega de funcions C++
La sobrecàrrega de funcions es defineix com el procés de tenir dues o més funcions amb el mateix nom, però amb paràmetres diferents. En la sobrecàrrega de funcions, la funció es redefineix utilitzant diferents tipus o nombre d'arguments. Només a través d'aquestes diferències un compilador pot diferenciar les funcions.
L'avantatge de la sobrecàrrega de funcions és que augmenta la llegibilitat del programa perquè no cal que utilitzeu noms diferents per a la mateixa acció.
Exemple: canvi del nombre d'arguments del mètode add().
C++
col·leccions java 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> |
>
>Sortida
30 55>
Complexitat temporal: O(1)
Complexitat espacial: O(1)
Exemple: quan el tipus dels arguments varien.
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> |
>
>Sortida
r1 is : 42 r2 is : 0.6>
Complexitat temporal: O(1)
Complexitat espacial: O(1)
Sobrecàrrega de funcions i ambigüitat
Quan el compilador no pot decidir quina funció s'ha d'invocar entre la funció sobrecarregada, aquesta situació es coneix com ambigüitat de sobrecàrrega de funcions.
Quan el compilador mostra l'error d'ambigüitat, el compilador no executa el programa.
Causes de l'ambigüitat:
- Conversió de tipus.
- Funció amb arguments per defecte.
- Funció amb pas per referència.
Conversió de tipus: -
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> |
>
>
L'exemple anterior mostra un error la trucada de 'fun (doble)' sobrecarregada és ambigua . El fun(10) cridarà a la primera funció. El fun(1.2) crida a la segona funció segons la nostra predicció. Però, això no es refereix a cap funció com en C++, totes les constants de coma flotant es tracten com a doble no com a flotant. Si substituïm float per double, el programa funciona. Per tant, es tracta d'una conversió de tipus de float a double.
Funció amb arguments per defecte: -
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> |
>
>
L'exemple anterior mostra un error la trucada de 'fun(int)' sobrecarregada és ambigua . El fun(int a, int b=9) es pot cridar de dues maneres: primer és cridant la funció amb un argument, és a dir, fun(12) i una altra manera és cridant la funció amb dos arguments, és a dir, fun(4). ,5). La funció fun(int i) s'invoca amb un argument. Per tant, el compilador no podria seleccionar entre fun(int i) i fun(int a,int b=9).
Funció amb referència de pas: -
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> |
>
>
L'exemple anterior mostra un error la trucada de 'fun(int&)' sobrecarregada és ambigua . La primera funció pren un argument enter i la segona funció pren un paràmetre de referència com a argument. En aquest cas, el compilador no sap quina funció necessita l'usuari ja que no hi ha cap diferència sintàctica entre fun(int) i fun(int &).
Funció d'amic
- Una funció amiga és una funció especial en C++ que, malgrat no ser una funció membre d'una classe, té el privilegi d'accedir a les dades privades i protegides d'una classe.
- Una funció amiga és una funció no membre o una funció ordinària d'una classe, que es declara utilitzant la paraula clau amic dins de la classe. En declarar una funció com a amiga, es donen tots els permisos d'accés a la funció.
- La paraula clau friend només es col·loca a la declaració de funció però no a la definició de la funció.
- Quan s'anomena la funció friend no s'utilitza ni el nom de l'objecte ni l'operador de punt. Tanmateix, pot acceptar l'objecte com un argument al valor del qual vol accedir.
- Una funció amiga es pot declarar en qualsevol secció de la classe, és a dir, pública, privada o protegida.
Declaració de la funció amic en C++
Sintaxi:
class { friend (argument/s); };>
Exemple_1: Trobeu el més gran de dos nombres mitjançant la funció d'amic
C++
matrius de programació java
#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;> }> |
>
>
Sortida
Enter the first number : 789 Enter the second number : 982 Largest number is 982>