C++ introduce un nuovo modo per passare dei parametri a una funzione, il passaggio per riferimento.
Riassumiamo velocemente i due metodi di passaggio dei parametri che abbiamo visto in C:
-
Il passaggio per valore effettua una copia del contenuto delle variabili passate, rendendole immutabili dalla funzione.
#include <stdio.h> void aggiungi_uno(int n) { n = n + 1; } int main() { int n = 1; aggiungi_uno(n); //n non cambia, perchè lo passiamo per valore printf("n = %d \n",n); return 0; }
-
Il passaggio per riferimento di c manda alla funzione un puntatore alla variabile, permettendo di cambiarne il valore.
#include <stdio.h> void aggiungi_uno(int *n) { *n = *n + 1; } int main() { int n = 1; aggiungi_uno(&n); //n cambia, perchè lo passiamo per riferimento printf("n = %d \n",n); return 0; }
Passaggio per riferimento in C++
Come abbiamo visto esiste già un passaggio per riferimento in C, in C++ questo viene chiamato passaggio per puntatore, in favore di una nuova tecnica chiamata passaggio per riferimento che troviamo qui sotto.
#include <iostream>
using namespace std;
void aggiungi_uno(int &n) {
n = n + 1;
}
int main() {
int n = 1;
aggiungi_uno(n);
//n cambia, perchè lo passiamo per riferimento (c++)
cout << "n = " << n << endl;
return 0;
}
L'effetto è lo stesso del passaggio per puntatore, ma ci risulta più comodo, perchè non dobbiamo mettere la "&" nella chiamata delle funzione, ma solo una volta nella dichiarazione.
Inoltre, il passaggio per riferimento è anche più sicuro: le variabili con valore NULL o di tipo void non sono ammesse. Questo rende effettivamente obsoleto il passaggio per puntatore di C nella buona parte del codice che scriveremo quotidianamente.