Le funzioni in C++, e in generale in tutti i linguaggi di programmazione, sono sostanzialmente dei blocchi di codice riutilizzabili; possono essere pensate come dei “sottoprogrammi” richiamabili da altri programmi.
Lo scopo principale dell’uso delle funzioni è quello di poter riutilizzare il codice che si scrive (senza doverlo quindi riscrivere più volte!), inoltre l’utilizzo delle funzioni aumenta la leggibilità dei programmi che le richiamano snellendone il codice e aiuta a dividere la risoluzione di un problema in sottoproblemi.
La sintassi di una funzione in in generale è:
INFO
tipo_ritorno nome_funzione (elenco_parametri) {
istruzioni;
return valore_restituito;
}
Dove:
void
come valore di ritorno.Parametri per valore: i parametri passati per valore vanno specificati all’interno delle parentesi tonde dopo il nome della funzione specificando per ogni parametro il nome preceduto dalla sua tipologia; quando sono presenti più parametri vanno separati da virgola. Quando si passa un parametro in questo modo all’inizio dell’esecuzione della funzione il valore memorizzato all’interno della variabile passata come parametro viene copiato in una nuova variabile della funzione. I parametri passati per valore possono essere anche opzionali, ovvero si possono creare funzioni che possono ricevere un numero diverso di parametri; questo si fa assegnando ad alcuni parametri dei valori di default.
Parametri per riferimento: affinché una funzione riceva un parametro in questo modo è necessario anteporre una & prima del nome del parametro. I parametri passati in questo modo fanno sì che i cambiamenti che all’interno del codice della funzione su un parametro avvengano anche sulle variabili del programma chiamante. I parametri passati per riferimento non possono né essere opzionali né essere valori numerici.
Ad esempio:
void funzione (int valore,int &riferimento) {
valore++;
riferimento++;
}
int main() {
int x=0;
int y=0;
funzione(x,y);
cout << x << endl; // -> 0 poiche' x e' passato per valore;
cout << y << endl; // -> 1 poiche' y e' passato per riferimento;
}