Grąžinti nuorodą C++

Grazinti Nuoroda C



C++ suteikia galimybę grąžinti reikšmę ar adresą pagal nuorodą, o ne nuorodas. Naudojant nuorodas, o ne nuorodas, C++ programa gali būti lengviau skaitoma ir valdoma. C++ kalboje nuorodos ir rodyklės yra glaudžiai susijusios viena su kita. Pagrindinis skirtumas yra tas, kad nors nuorodos yra tik alternatyvus pavadinimas, kito kintamojo „alias“, rodyklės gali būti naudojamos atliekant tokias operacijas kaip verčių pridėjimas. Nuoroda yra alternatyvus pavadinimas arba pradinės vertės dublikatas ir žymimas simboliu „&“.

1 pavyzdys:

Importuojame „iostream“ antraštės failą ir tada naudojame „std“ vardų erdvę. Antraštės failai importuojami C++ kodais, nes yra apibrėžta daug funkcijų. Tada sukuriame grąžinimo nuorodos funkciją, įdėdami simbolį „&“ su funkcijos pavadinimu „returnTheValue“.







Čia dabar įterpta nuoroda „vertė“. Po juo atspausdiname vertę ir adresą su nuoroda „&value“. Tada įdedame grąžinimo nuorodą ir įdedame „vertę“. Dabar čia iškviečiamas „main()“ ir inicijuojame „n1“ su „44“ reikšme. Po juo „int& n2“ inicijuojamas „returnTheValue(n1)“. Dabar atspausdiname „n1“ reikšmę ir jo adresą. Tada išspausdiname „n2“ reikšmę ir „n2“ adresą, naudodami „cout“.



1 kodas:



#include
naudojant vardų erdvę std;
tarpt & returnTheValue ( tarpt & vertė )
{
cout << 'Vertė =' << vertė << endl
<< 'Vertės adresas yra'
<< & vertė << endl;
grąžinti vertė;
}
tarp pagrindinis ( )
{
tu n1 = 44 ;
tarpt & n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << endl
<< 'N1 adresas yra'
<< & n1 << endl;
cout << 'n2 =' << n2 << endl
<< 'N2 adresas yra'
<< & n2 << endl;
grąžinti 0 ;
}


Išvestis:





Čia galime pastebėti, kad nuoroda yra tik alternatyvus kito kintamojo pavadinimas, kaip parodyta toliau. Kaip vertės adresas, „n1“ ir „n2“ niekada nesikeičia.



2 pavyzdys:

Importavę „iostream“ antraštės failą naudojame vardų erdvę „std“. Tada naudojame funkcijos pavadinimą „MyReturnValueFunc“ ir simbolį „&“, kad sukurtume grąžinimo nuorodos funkciją. Čia pateikiama nuoroda į „v1“ kintamąjį. Spausdiname vertę ir adresą su nuoroda „&v1“. Toliau šioje vietoje įterpiame „grįžimo nuorodą“, naudodami „grįžti“ ir „v1“. Čia iškviečiamas „main()“, o „num_1“ inicijuojamas reikšme „19“. „int& num_2“ inicijavimas atliekamas naudojant „MyReturnValueFunc(num_1)“.

Šiuo metu spausdiname „num_1“ reikšmę ir adresą, o naudodami „cout“ spausdiname „num_2“ reikšmę ir adresą. Dabar keičiame „num_1“ reikšmę, naudodami adresą, kurį čia grąžina „MyReturnValueFunc“. Ši funkcija grąžina alternatyvų pavadinimą „v1“, kuris taip pat yra alternatyvus „num_1“ pavadinimas. Taigi, mes keičiame jo reikšmę ir nustatome ją į „91“. „91“ priskiriame „MyReturnValueFunc(num_1)“, kuri čia veikia kaip slapyvardis. Tada dar kartą išspausdiname reikšmę ir „num_1“ adresą.

2 kodas:

#include
naudojant vardų erdvę std;
tarpt & MyReturnValueFunc ( tarpt & v1 )
{
cout << 'V1 reikšmė = ' << v1 << endl
<< ' v1 kintamojo adresas yra '
<< & v1 << endl;
grąžinti v1;
}
tarp pagrindinis ( )
{
int skaičius_1 = 19 ;
tarpt & num_2 = MyReturnValueFunc ( skaičius_1 ) ;
cout << 'Skaičiaus_1 reikšmė = ' << skaičius_1 << endl
<< 'Num_1 adresas yra '
<< & skaičius_1 << endl;
cout << 'Skaičiaus_2 reikšmė = ' << skaičius_2 << endl
<< 'Num_2 adresas yra'
<< & skaičius_2 << endl;
MyReturnValueFunc ( skaičius_1 ) = 91 ;
cout << 'Dabar skaičius_1 = ' << skaičius_1 << endl
<< 'Num_1 adresas yra'
<< & skaičius_1 << endl;
grąžinti 0 ;
}


Išvestis:

Kaip parodyta toliau, matome, kad nuoroda yra tik alternatyvus kito kintamojo pavadinimas, nes „v1“, „num_1“ ir „num_2“ reikšmių adresas liko nepakitęs:

3 pavyzdys:

Importuojamas „iostream“ antraštės failas ir naudojama „std“ vardų sritis. Kadangi antraštės failuose nurodyta daug funkcijų, jas importuojame į C++ kodus. Čia sukuriame funkciją „ReturnRefFun()“, kurioje įdedame „int& my_ref“, kuri grąžina nuorodą. „int& ReturnRefFun“ čia deklaruojama kaip atskaitos funkcija. Po to padidiname „my_ref“ kintamojo reikšmę. Po juo įdedame „grįžti“, kuris grąžina nuorodą „my_ref“.

Po to čia iškviečiamas „main()“ metodas. Tada inicijuojame kintamąjį „first_value“ su „21“. Žemiau mes grąžiname nuorodos kopiją, įdėdami „first_value“ į funkciją „ReturnRefFun“ ir išsaugome ją „copied_value“ kintamajame. Tada spausdiname ir „first_value“, ir „copied_value“, naudodami „cout“. Po juo padidiname kintamąjį „copied_value“ įdėdami „copied_value++“. Tada atspausdiname „copied_value“ jį padidinę ir „first_value“ naudodami „cout“. Po to mes grąžiname nuorodą inicijuodami kintamąjį „int& ref_value“ su „ReturnRefFun(first_value)“.

Po to atspausdiname kintamojo „my_ref“, kurį nukopijavome, reikšmę. Tada atspausdiname kintamojo „first_value“ reikšmę. Po juo mes padidiname „ref_value“ reikšmę įdėdami „ref_value++“. Po juo atspausdiname padidintą „ref_value“ reikšmę ir „first_value“ kintamąjį, naudodami „cout“. Pakeitus „ref_value“, „first_value“ taip pat pasikeis.

3 kodas:

#include
naudojant vardų erdvę std;
tarpt & ReturnRefFun ( tarpt & mano_nuoroda ) {
mano_nuoroda++;
grąžinti mano_nuoroda;
}
tarp pagrindinis ( ) {
tarpt pirmoji_vertė = dvidešimt vienas ;
tarpt nukopijuota_vertė =ReturnRefFun ( pirmoji_vertė ) ;
cout << 'Pirmoji reikšmė yra: ' << pirmoji_vertė << endl;
cout << 'Nukopijuota vertė yra: ' << nukopijuota_vertė << endl;
nukopijuota_vertė++;
cout << 'Nukopijuota_vertė padidinama: ' << nukopijuota_vertė << endl;
cout << 'Pirmoji vertė:' << pirmoji_vertė << endl;
tarpt & ref_value =ReturnRefFun ( pirmoji_vertė ) ;
cout << 'Nuorodos nukopijuota vertė: ' << ref_value << endl;
cout << 'Pirmoji vertė:' << pirmoji_vertė << endl;
ref_value++;
cout << 'Atskaitos vertė padidinama:' << ref_value << endl;
cout << 'Pirmoji vertė:' << pirmoji_vertė << endl;
grąžinti 0 ;
}


Išvestis:

Štai ankstesnio kodo, kuriame naudojome „grįžimo nuorodos“ metodą, rezultatas. Pavyzdyje parodytas skirtumas tarp nuorodos kintamojo dublikato ir paties nuorodos kintamojo grąžinimo.

4 pavyzdys:

Čia „int& rByRef“ deklaruojama kaip nuorodos funkcija, kuri grąžina nuorodos kintamąjį. Perduodame „int& data“ šiai funkcijai „int& rByref()“. Čia atspausdiname „duomenų“ kintamojo adresą ir naudojame žemiau pateiktą grąžinimo nuorodą. Dabar inicijuojame „x_var“ kintamąjį, pasinaudoję „main()“ metodu. Tada čia atspausdiname „x_var“ adresą, į „cout“ įdėdami „&x_var“.

Po juo mes naudojame nuorodos kintamąjį, priskirdami „rByref(x_var)“ prie „int& y_var“. Tada taip pat išspausdiname to „&y_var“ nuorodos kintamojo adresą. Po juo nukopijuojame kintamąjį „x_var“ į kintamąjį „z_var“ ir taip pat išspausdiname šio nukopijuoto kintamojo adresą, kuris yra „&z_var“. Po to iškviečiame funkciją „rByref()“, perduodame kintamąjį „x_var“ kaip parametrą jos viduje ir šiam kintamajam priskiriame „93“. Taip pat dar kartą pateikiame „x_var“ adresą, į „cout“ įdėdami „&x_var“.

4 kodas:

#include
naudojant vardų erdvę std;
tarpt & rByref ( tarpt & duomenis )
{
cout << „Duomenų adresas:“ << & duomenis << endl;
grąžinti duomenys;
}
tarp pagrindinis ( )
{
int x_var = 42 ;
cout << 'x_var adresas:' << & x_var << endl;
tarpt & y_var = rByref ( x_var ) ;
cout << 'Y_var adresas: ' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'z_var adresas: ' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'x_var adresas:' << & x_var << endl;
grąžinti 0 ;
}


Išvestis:

Rezultatas aiškiai parodo, kad klonuoto kintamojo adresas „z_var“ skiriasi nuo visų kitų vietų, kurias nurodo pradinis kintamasis „x_var“.

Išvada

Šioje pamokoje išsamiai išnagrinėta „grįžimo nuorodos“ sąvoka. Sužinojome, kad „grįžimo nuoroda“ yra panaši į „rodiklius“ programuojant C++. Aptarėme, kad norint nurodyti, kuri funkcija grąžina nuorodą, kartu su funkcijos grąžinimo tipu reikia naudoti simbolį „&“. Šioje pamokoje pavaizdavome keletą pavyzdžių ir jų rezultatus bei supratome šią sąvoką.