Jak już wspominałem w poprzednich artykułach, funkcje w C++ mogą zwracać co najwyżej jedną wartość, która może posłużyć dalszej obróbce (wartość zwrotna funkcji). Zatem co zrobić w sytuacji, gdy potrzebujemy tych wartości więcej?
Jednym ze sposobów uporania się z tym problemem jest wykorzystanie referencji.
Pamiętamy, że w chwili przykazywania danych do funkcji tworzone są w pamięci ich kopie, czego konsekwencją jest to, że każda zmiana na wartościach tych zmiennych nie będzie "widoczna" w miejscu, w którym tą funkcję wywołaliśmy.
Referencje powodują, że w chwili przekazywania argumentów, pracujemy na oryginałach zmiennych, ponieważ przekazywane są ich adresy.
Aby przekazać referencję, należy dodać po nazwie typu znak "&" np.:
void funkcja(char &a, int &b);
Przeanalizujmy zadanie polegające na zamianie wartości dwóch zmiennych.
Rozwiązanie bez użycia referencji
#include <iostream>
using namespace std;
void zamiana(int a,int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a, b;
cout<<"Podaj dwie liczby: ";
cin>>a>>b;
cout<<"Przed zamiana: a = "<<a<<", b = "<<b<<endl;
zamiana(a,b);
cout<<"Po zamianie: a = "<<a<<", b = "<<b<<endl;
return 0;
}
Oczywiście efekt nie będzie zadowalający:
Rozwiązanie z wykorzystaniem referencji:
#include <iostream>
using namespace std;
void zamiana(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a, b;
cout<<"Podaj dwie liczby: ";
cin>>a>>b;
cout<<"Przed zamiana: a = "<<a<<", b = "<<b<<endl;
zamiana(a,b);
cout<<"Po zamianie: a = "<<a<<", b = "<<b<<endl;
return 0;
}
Tu widzimy, że funkcja spełnia kryteria zadania.
Warto wspomnieć, że podobne działanie uzyskamy także w przypadku przekazania argumentów funkcji za pomocą wskaźników.