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:
#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;
}
#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;
}
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.