Returnați referința în C++

Returnati Referinta In C



C++ oferă o facilitate de a returna o valoare sau o adresă prin referință, mai degrabă decât prin indicatori. Utilizarea referințelor în loc de pointeri poate face un program C++ mai ușor de citit și de gestionat. În C++, referințele și pointerii sunt strâns legate între ele. Distincția principală este că, deși referințele sunt doar un nume alternativ, „alias” pentru o altă variabilă, pointerii pot fi utilizați în operațiuni precum adăugarea de valori. O referință este un nume alternativ sau un duplicat al valorii inițiale și este indicată de simbolul „&”.

Exemplul 1:

Importăm fișierul antet „iostream” și apoi utilizăm spațiul de nume „std”. Fișierele antet sunt importate în coduri C++, deoarece sunt definite multe funcții. Apoi, creăm o funcție de referință de returnare prin plasarea simbolului „&” cu numele funcției, „returnTheValue”.







Aici, referința „valoare” este acum inserată. Sub aceasta, tipărim valoarea și adresa cu referința „&value”. Apoi, plasăm referința de returnare și plasăm „valoarea”. Acum, „main()” este invocat aici și inițializam „n1” cu valoarea „44”. Sub aceasta, „int& n2” este inițializat cu „returnTheValue(n1)”. Acum, imprimăm valoarea lui „n1”, precum și adresa acesteia. Apoi, imprimăm valoarea „n2” precum și adresa lui „n2” utilizând „cout”.



Cod 1:



#include
folosind namespace std;
int & returnTheValue ( int & valoare )
{
cout << „Valoare =” << valoare << endl
<< 'Adresa valorii este'
<< & valoare << endl;
întoarcere valoare;
}
int principal ( )
{
tu n1 = 44 ;
int & n2 = returnTheValue ( n1 ) ;
cout << 'n1 = ' << n1 << endl
<< 'Adresa lui n1 este'
<< & n1 << endl;
cout << 'n2 = ' << n2 << endl
<< 'Adresa lui n2 este'
<< & n2 << endl;
întoarcere 0 ;
}


Ieșire:





Aici, putem observa că o referință este doar un nume alternativ al unei alte variabile, așa cum se arată în cele ce urmează. Ca adresă de valoare, „n1” și „n2” nu se schimbă niciodată.



Exemplul 2:

Folosim spațiul de nume „std” după importul fișierului antet „iostream”. Apoi, folosim numele funcției „MyReturnValueFunc” și simbolul „&” pentru a construi o funcție de referință de returnare. Referința la variabila „v1” este plasată aici. Tipărim valoarea și adresa cu referința „&v1” dedesubt. Apoi, inserăm „referința de returnare” utilizând „return” și „v1” în această locație. Aici, „main()” este numit, iar „num_1” este inițializat cu valoarea „19”. Inițializarea lui „int& num_2” se face cu „MyReturnValueFunc(num_1)”.

În prezent, tipărim valoarea și adresa lui „num_1” și, folosind „cout”, tipărim valoarea și adresa lui „num_2”. Acum schimbăm valoarea „num_1” utilizând adresa care este returnată aici de „MyReturnValueFunc”. Această funcție returnează numele alternativ al lui „v1”, care este și numele alternativ al lui „num_1”. Deci, îi schimbăm valoarea și o setăm la „91”. Atribuim „91” lui „MyReturnValueFunc(num_1)”, care acționează ca alias aici. Apoi, imprimăm din nou valoarea și adresa „num_1”.

Cod 2:

#include
folosind namespace std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'Valoarea lui v1 = ' << v1 << endl
<< ' Adresa variabilei v1 este '
<< & v1 << endl;
întoarcere v1;
}
int principal ( )
{
int num_1 = 19 ;
int & num_2 = MyReturnValueFunc ( num_1 ) ;
cout << 'Valoarea lui num_1 = ' << num_1 << endl
<< ' Adresa lui num_1 este '
<< & num_1 << endl;
cout << 'Valoarea lui num_2 = ' << num_2 << endl
<< ' Adresa lui num_2 este '
<< & num_2 << endl;
MyReturnValueFunc ( num_1 ) = 91 ;
cout << 'Acum, valoarea lui num_1 = ' << num_1 << endl
<< 'Adresa num_1 este '
<< & num_1 << endl;
întoarcere 0 ;
}


Ieșire:

După cum se demonstrează în cele ce urmează, putem vedea că o referință este doar un nume alternativ pentru o altă variabilă, deoarece adresa valorilor „v1”, „num_1” și „num_2” a rămas constantă:

Exemplul 3:

Fișierul antet „iostream” este importat și se folosește spațiul de nume „std”. Deoarece numeroase funcții sunt specificate în fișierele antet, le importăm în codurile C++. Aici, creăm o funcție „ReturnRefFun()” în care plasăm „int& my_ref” care returnează referința. „int& ReturnRefFun” este declarat aici ca funcție de referință. După aceasta, creștem valoarea variabilei „my_ref”. Sub aceasta, punem „return” care returnează referința „my_ref”.

După aceasta, aici este invocată metoda „main()”. Apoi, inițializam variabila „first_value” cu „21”. Sub aceasta, returnăm copia referinței plasând „first_value” în funcția „ReturnRefFun” și o salvăm în variabila „copied_value”. Apoi, imprimăm atât „first_value”, cât și „copied_value” utilizând „cout”. Sub aceasta, creștem variabila „copied_value” prin plasarea „copied_value++”. Apoi, tipărim „copied_value” după ce l-am incrementat și „first_value” folosind „cout”. După aceasta, returnăm referința cu ajutorul inițializării variabilei „int& ref_value” cu „ReturnRefFun(first_value)”.

După aceasta, imprimăm valoarea variabilei „my_ref” pe care am copiat-o. Apoi, imprimăm valoarea variabilei „first_value”. Sub aceasta, creștem valoarea „ref_value” punând „ref_value++”. Sub aceasta, imprimăm valoarea incrementată a „ref_value” și, de asemenea, variabila „first_value” cu ajutorul „cout”. Când „ref_value” este schimbat, „first_value” se va schimba și el.

Cod 3:

#include
folosind namespace std;
int & ReturnRefFun ( int & my_ref ) {
my_ref++;
întoarcere my_ref;
}
int principal ( ) {
int prima_valoare = douăzeci și unu ;
int copied_value =ReturnRefFun ( prima_valoare ) ;
cout << 'Prima valoare este: ' << prima_valoare << endl;
cout << 'Valoarea copiată este : ' << copied_value << endl;
valoarea_copiată++;
cout << „Copiad_value este incrementat: „ << copied_value << endl;
cout << 'Prima valoare: ' << prima_valoare << endl;
int & valoare_ref =ReturnRefFun ( prima_valoare ) ;
cout << „Valoarea de referință copiată:” << valoare_ref << endl;
cout << 'Prima valoare: ' << prima_valoare << endl;
valoare_ref++;
cout << 'Valoarea de referință este incrementată : ' << valoare_ref << endl;
cout << 'Prima valoare: ' << prima_valoare << endl;
întoarcere 0 ;
}


Ieșire:

Iată rezultatul codului anterior în care am folosit tehnica „referință de returnare”. Exemplul arată diferența dintre returnarea unui duplicat al variabilei de referință și returnarea variabilei de referință în sine.

Exemplul 4:

Aici, „int& rByRef” este declarată ca funcție de referință care returnează variabila de referință. Transmitem „int& data” acestei funcții „int& rByref()”. Aici, imprimăm adresa variabilei „date” și apoi utilizăm referința de returnare de mai jos. Acum, inițializam variabila „x_var” după invocarea metodei „main()”. Apoi, tipărim adresa „x_var” aici punând „&x_var” în „cout”.

Sub aceasta, folosim variabila de referință prin atribuirea „rByref(x_var)” la „int& y_var”. Apoi, imprimăm și adresa acelei variabile de referință „&y_var”. Sub aceasta, copiem variabila „x_var” în variabila „z_var” și imprimăm, de asemenea, adresa acestei variabile copiate, care este „&z_var”. După aceasta, numim funcția „rByref()”, trecem variabila „x_var” ca parametru în interiorul acesteia și atribuim „93” acestei variabile. De asemenea, redăm adresa „x_var” din nou punând „&x_var” în „cout”.

Cod 4:

#include
folosind namespace std;
int & rByref ( int & date )
{
cout << „Adresa datelor:” << & date << endl;
întoarcere date;
}
int principal ( )
{
int x_var = 42 ;
cout << 'Adresa lui x_var: ' << & x_var << endl;
int & y_var = rByref ( x_var ) ;
cout << 'Adresa lui y_var: ' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Adresa lui z_var: ' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'Adresa lui x_var: ' << & x_var << endl;
întoarcere 0 ;
}


Ieșire:

Rezultatul arată clar că adresa variabilei clonate, „z_var”, diferă de toate celelalte locații la care se referă variabila originală, „x_var”.

Concluzie

Conceptul de „referință de returnare” este explorat în acest tutorial în detaliu. Am aflat că „referința de returnare” este similară cu „pointerii” din programarea C++. Am discutat că pentru a indica ce funcție returnează o referință, simbolul „&” trebuie utilizat cu tipul de returnare al funcției. Am ilustrat câteva exemple și rezultatele acestora și am înțeles acest concept în acest tutorial.