Vrátiť referenciu v C++

Vratit Referenciu V C



C++ poskytuje možnosť vrátiť hodnotu alebo adresu pomocou odkazu, nie ukazovateľov. Používanie odkazov namiesto ukazovateľov môže zjednodušiť čítanie a správu programu C++. V C++ sú odkazy a ukazovatele úzko prepojené. Primárny rozdiel je v tom, že hoci sú odkazy iba alternatívnym názvom, „aliasom“ pre inú premennú, ukazovatele môžu byť použité pri operáciách, ako je pridávanie hodnôt. Odkaz je alternatívny názov alebo duplikát pôvodnej hodnoty a je označený symbolom „&“.

Príklad 1:

Importujeme hlavičkový súbor „iostream“ a potom použijeme priestor názvov „std“. Súbory hlavičiek sa importujú do kódov C++, keďže je definovaných veľa funkcií. Potom vytvoríme funkciu návratovej referencie umiestnením symbolu „&“ s názvom funkcie „returnTheValue“.







Tu sa teraz vkladá odkaz „hodnota“. Pod tým vytlačíme hodnotu a adresu s odkazom „&value“. Potom umiestnime návratovú referenciu a umiestnime „hodnotu“. Teraz sa tu vyvolá „main()“ a inicializujeme „n1“ s hodnotou „44“. Pod týmto sa „int& n2“ inicializuje pomocou „returnTheValue(n1)“. Teraz vytlačíme hodnotu „n1“, ako aj jej adresu. Potom vytlačíme hodnotu „n2“, ako aj adresu „n2“ pomocou „cout“.



Kód 1:



#include
pomocou menného priestoru std;
int & returnTheValue ( int & hodnotu )
{
cout << 'Hodnota = ' << hodnotu << endl
<< 'Adresa hodnoty je'
<< & hodnotu << endl;
vrátiť hodnota;
}
int main ( )
{
ty n1 = 44 ;
int & n2 = returnTheValue ( n1 ) ;
cout << 'n1 = ' << n1 << endl
<< 'Adresa n1 je'
<< & n1 << endl;
cout << 'n2 = ' << n2 << endl
<< 'Adresa n2 je'
<< & n2 << endl;
vrátiť 0 ;
}


Výkon:





Tu si môžeme všimnúť, že odkaz je iba alternatívny názov inej premennej, ako je uvedené nižšie. Ako adresa hodnoty sa „n1“ a „n2“ nikdy nemenia.



Príklad 2:

Priestor názvov „std“ používame po importovaní súboru hlavičky „iostream“. Ďalej použijeme názov funkcie „MyReturnValueFunc“ a symbol „&“ na vytvorenie funkcie návratovej referencie. Tu je umiestnený odkaz na premennú „v1“. Vytlačíme hodnotu a adresu s odkazom „&v1“ pod tým. Ďalej vložíme „referenčný odkaz na vrátenie“ pomocou „návratu“ a „v1“ na toto miesto. Tu sa zavolá „main()“ a „num_1“ sa inicializuje hodnotou „19“. Inicializácia „int& num_2“ sa vykoná pomocou „MyReturnValueFunc(num_1)“.

V súčasnosti vytlačíme hodnotu a adresu „num_1“ a pomocou „cout“ vytlačíme hodnotu a adresu „num_2“. Teraz zmeníme hodnotu „num_1“ pomocou adresy, ktorú sem vráti „MyReturnValueFunc“. Táto funkcia vráti alternatívny názov „v1“, ktorý je tiež alternatívnym názvom „num_1“. Takže zmeníme jeho hodnotu a nastavíme ju na „91“. „91“ priradíme „MyReturnValueFunc(num_1)“, ktorý tu funguje ako alias. Potom znova vytlačíme hodnotu a adresu „num_1“.

Kód 2:

#include
pomocou menného priestoru std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'Hodnota v1 = ' << v1 << endl
<< 'Adresa premennej v1 je'
<< & v1 << endl;
vrátiť v1;
}
int main ( )
{
int číslo_1 = 19 ;
int & num_2 = MyReturnValueFunc ( číslo_1 ) ;
cout << 'Hodnota num_1 = ' << číslo_1 << endl
<< 'Adresa num_1 je'
<< & číslo_1 << endl;
cout << 'Hodnota num_2 = ' << číslo_2 << endl
<< 'Adresa num_2 je'
<< & číslo_2 << endl;
MyReturnValueFunc ( číslo_1 ) = 91 ;
cout << 'Teraz hodnota num_1 = ' << číslo_1 << endl
<< 'Adresa num_1 je'
<< & číslo_1 << endl;
vrátiť 0 ;
}


Výkon:

Ako je znázornené v nasledujúcom texte, môžeme vidieť, že odkaz je iba alternatívnym názvom pre inú premennú, pretože adresa hodnôt „v1“, „num_1“ a „num_2“ zostala konštantná:

Príklad 3:

Importuje sa hlavičkový súbor „iostream“ a použije sa menný priestor „std“. Keďže množstvo funkcií je špecifikovaných v hlavičkových súboroch, importujeme ich do kódov C++. Tu vytvoríme funkciu „ReturnRefFun()“, do ktorej umiestnime „int& my_ref“, ktorá vráti referenciu. Funkcia „int& ReturnRefFun“ je tu deklarovaná ako referenčná funkcia. Potom zvýšime hodnotu premennej „my_ref“. Pod to dáme „návrat“, ktorý vráti referenciu „my_ref“.

Potom sa tu vyvolá metóda „main()“. Potom inicializujeme premennú „first_value“ s „21“. Pod tým vrátime kópiu referencie umiestnením „first_value“ do funkcie „ReturnRefFun“ a uložíme ju do premennej „copied_value“. Potom vytlačíme „first_value“, ako aj „copied_value“ pomocou „cout“. Pod tým zvýšime premennú „copied_value“ umiestnením „copied_value++“. Potom vytlačíme „copied_value“ po jej zvýšení a „first_value“ pomocou „cout“. Potom vrátime referenciu pomocou inicializácie premennej „int& ref_value“ pomocou „ReturnRefFun(first_value)“.

Potom vytlačíme hodnotu premennej „my_ref“, ktorú sme skopírovali. Potom vytlačíme hodnotu premennej „first_value“. Pod tým zvýšime hodnotu „ref_value“ vložením „ref_value++“. Pod tým vytlačíme inkrementovanú hodnotu „ref_value“ a tiež premennú „first_value“ pomocou „cout“. Keď sa zmení „ref_value“, zmení sa aj „first_value“.

Kód 3:

#include
pomocou menného priestoru std;
int & ReturnRefFun ( int & my_ref ) {
my_ref++;
vrátiť my_ref;
}
int main ( ) {
int prvá_hodnota = dvadsaťjeden ;
int skopírovaná_hodnota =ReturnRefFun ( prvá_hodnota ) ;
cout << 'Prvá hodnota je:' << prvá_hodnota << endl;
cout << 'Skopírovaná hodnota je: ' << skopírovaná_hodnota << endl;
skopírovaná_hodnota++;
cout << 'Copied_value sa zvýši: ' << skopírovaná_hodnota << endl;
cout << 'Prvá hodnota:' << prvá_hodnota << endl;
int & referenčná_hodnota =ReturnRefFun ( prvá_hodnota ) ;
cout << 'Referenčná skopírovaná hodnota: ' << referenčná_hodnota << endl;
cout << 'Prvá hodnota:' << prvá_hodnota << endl;
ref_value++;
cout << 'Referenčná hodnota sa zvýši: ' << referenčná_hodnota << endl;
cout << 'Prvá hodnota:' << prvá_hodnota << endl;
vrátiť 0 ;
}


Výkon:

Tu je výsledok predchádzajúceho kódu, kde sme použili techniku ​​„referenčného návratu“. Príklad ukazuje rozdiel medzi vrátením duplikátu referenčnej premennej a vrátením samotnej referenčnej premennej.

Príklad 4:

Tu je „int& rByRef“ deklarované ako referenčná funkcia, ktorá vracia referenčnú premennú. Tejto funkcii „int& rByref()“ odovzdáme „int& data“. Tu vytlačíme adresu premennej „data“ a potom použijeme návratovú referenciu nižšie. Teraz inicializujeme premennú „x_var“ po vyvolaní metódy „main()“. Potom tu vytlačíme adresu „x_var“ vložením „&x_var“ do „cout“.

Pod tým použijeme referenčnú premennú priradením „rByref(x_var)“ k „int& y_var“. Potom vytlačíme aj adresu referenčnej premennej „&y_var“. Pod tým skopírujeme premennú „x_var“ do premennej „z_var“ a vytlačíme aj adresu tejto skopírovanej premennej, ktorá je „&z_var“. Potom zavoláme funkciu „rByref()“, do nej odovzdáme premennú „x_var“ ako parameter a tejto premennej priradíme „93“. Znova vykreslíme adresu „x_var“ vložením „&x_var“ do „cout“.

Kód 4:

#include
pomocou menného priestoru std;
int & rByref ( int & údajov )
{
cout << 'Adresa údajov: ' << & údajov << endl;
vrátiť údaje;
}
int main ( )
{
int x_var = 42 ;
cout << 'Adresa x_var: ' << & x_var << endl;
int & y_var = rByref ( x_var ) ;
cout << 'Adresa y_var: ' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Adresa z_var: ' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'Adresa x_var: ' << & x_var << endl;
vrátiť 0 ;
}


Výkon:

Výsledok objasňuje, že adresa klonovanej premennej „z_var“ sa líši od všetkých ostatných umiestnení, na ktoré odkazuje pôvodná premenná „x_var“.

Záver

Koncept „referenčného vrátenia“ je podrobne preskúmaný v tomto návode. Dozvedeli sme sa, že „návratová referencia“ je podobná „ukazovateľom“ v programovaní v C++. Diskutovali sme o tom, že na označenie funkcie, ktorá vracia odkaz, je potrebné použiť symbol „&“ s typom návratu funkcie. V tomto návode sme ilustrovali niektoré príklady a ich výsledky a pochopili sme tento koncept.