O co chodzi z tą referencją, i co to takiego jest ?

Patrząc na ekran, po kompilacji programu, zauwazamy ze funkcja, która chciała wyzerować dwa obiekty a i b wysłane do niej jako argumeny, zaskoczyła nas.

Oczywiście obiekt a jest nietknięty. To znamy, jednak obiekt b ma wartość 0, dlaczego?

Kilka słów o funkcji zer:

Widzimy,że to funkcja , która przyjmuje dwa argumenty, pierwszy z nich jest przesyłany – tak jak poprzednio – przez wartość, drugi natomiast jest przesyłany przez referencję. Zauważ znak &.

W main mamy dwie zmienne, które wysyłamy do funkcji zer. Inaczej mówiąc: wywołujemy funkcje zer z parametrami aktualnymi a,b.

Wewnątrz funkcji zer, na moment przed egzekucją, wypisujemy jeszcze wartość dwóch parametrów formalnych wart,ref.
Tu następuje jakaś operacja zmieniająca wartość zmiennych wart i ref.W naszym przypadku wpisanie im zer.

Na dowód, że tak się stało w istocie – wypisujemy ich wartość na ekran.

Kończymy pracę funkcji, będąc już w main wypisujemy na ekranie wartości zmiennych a i b. I tu cała niespodzianka.
a pozostało bez zmian, a b?

pozostało zmienione właśnie ze względu na referencję.
– dwie nazwy ref, b określały ten sam obiekt. W tym cała filozofia referencji w języku C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
 
 
void zer(int wart, int &ref) {
	cout<<"\tW funkcji zer przed zerowaniem\n";
	cout<<"\twart="<<wart<<"ref."<<ref<<endl;
 
	wart = 0;
	ref = 0;
 
	cout<<"\tW funkcji zer po zerowaniu\n";
	cout<<"\twart="<<wart<<"ref="<<ref<<endl;
							}
 
int main() {
	int a = 44, b= 77;
 
	cout<<"Przed wywolaniem funkcji:zer\n";
	cout<<"a "<<a<<"  b  "<<b;
 
	zer(a,b);
	cout<<"Po powrocie z funkcji zer\n";
	cout<<" a "<<a<<"  b"<<b<<endl;
	system("PAUSE");
}