Tagasta viide C++ keeles

Tagasta Viide C Keeles



C++ pakub võimalust tagastada väärtus või aadress selle viite, mitte osutite abil. Viidete kasutamine osutite asemel muudab C++ programmi lugemise ja haldamise lihtsamaks. C++ keeles on viited ja viited üksteisega tihedalt seotud. Peamine erinevus seisneb selles, et kuigi viited on vaid alternatiivne nimi, teise muutuja 'alias', saab osutajaid kasutada näiteks väärtuste lisamisel. Viide on algse väärtuse alternatiivne nimi või duplikaat ja seda tähistatakse sümboliga „&”.

Näide 1:

Impordime päisefaili „iostream” ja kasutame seejärel nimeruumi „std”. Päisefailid imporditakse C++ koodides, kuna paljud funktsioonid on määratletud. Seejärel loome tagastamise viitefunktsiooni, asetades sümboli '&' koos funktsiooni nimega 'returnTheValue'.







Siin on nüüd lisatud 'väärtuse' viide. Selle alla trükime väärtuse ja aadressi koos viitega „&väärtus”. Seejärel asetame tagasi viite ja asetame 'väärtuse'. Nüüd kutsutakse siin esile 'main()' ja lähtestatakse 'n1' väärtusega '44'. Selle all initsialiseeritakse 'int& n2' väärtusega 'returnTheValue(n1)'. Nüüd trükime nii “n1” väärtuse kui ka selle aadressi. Seejärel prindime 'n2' väärtuse ja 'n2' aadressi, kasutades 'cout'.



Kood 1:



#include
kasutades nimeruumi std;
int & returnTheValue ( int & väärtus )
{
cout << 'Väärtus =' << väärtus << endl
<< 'Väärtuse aadress on'
<< & väärtus << endl;
tagasi väärtus;
}
int main ( )
{
sa n1 = 44 ;
int & n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << endl
<< 'N1 aadress on'
<< & n1 << endl;
cout << 'n2 =' << n2 << endl
<< 'N2 aadress on'
<< & n2 << endl;
tagasi 0 ;
}


Väljund:





Siinkohal võime märkida, et viide on ainult teise muutuja alternatiivnimi, nagu on näidatud järgmises. Väärtuse aadressina ei muutu “n1” ja “n2” kunagi.



Näide 2:

Pärast päisefaili iostream importimist kasutame nimeruumi 'std'. Järgmisena kasutame tagastamise viitefunktsiooni koostamiseks funktsiooni nime 'MyReturnValueFunc' ja sümbolit '&'. Siin on viide muutujale 'v1'. Prindime väärtuse ja aadressi koos viitega „&v1” selle alla. Järgmisena sisestame 'tagastamise viite', kasutades selles kohas 'tagasi' ja 'v1'. Siin kutsutakse välja 'main()' ja 'num_1' lähtestatakse väärtusega '19'. Initsialiseerimine 'int& num_2' tehakse funktsiooniga 'MyReturnValueFunc(num_1)'.

Praegu trükime “num_1” väärtuse ja aadressi ning “cout” abil trükime “num_2” väärtuse ja aadressi. Nüüd muudame 'num_1' väärtust, kasutades aadressi, mille siin tagastab 'MyReturnValueFunc'. See funktsioon tagastab 'v1' alternatiivse nime, mis on ka 'num_1' alternatiivne nimi. Seega muudame selle väärtust ja määrame selle väärtuseks '91'. Määrame '91' väärtusele 'MyReturnValueFunc(num_1)', mis toimib siin varjunimena. Seejärel prindime uuesti väärtuse ja aadressi 'num_1'.

Kood 2:

#include
kasutades nimeruumi std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'V1 väärtus =' << v1 << endl
<< 'V1 muutuja aadress on'
<< & v1 << endl;
tagasi v1;
}
int main ( )
{
int arv_1 = 19 ;
int & num_2 = MyReturnValueFunc ( number_1 ) ;
cout << 'Arv_1 väärtus =' << number_1 << endl
<< 'Num_1 aadress on'
<< & number_1 << endl;
cout << 'Arv_2 väärtus =' << number_2 << endl
<< 'Num_2 aadress on'
<< & number_2 << endl;
MyReturnValueFunc ( number_1 ) = 91 ;
cout << 'Nüüd väärtus number_1 = ' << number_1 << endl
<< 'Num_1 aadress on'
<< & number_1 << endl;
tagasi 0 ;
}


Väljund:

Nagu on näidatud järgmises, näeme, et viide on lihtsalt teise muutuja alternatiivne nimi, kuna väärtuste 'v1', 'num_1' ja 'num_2' aadressid jäid konstantseks:

Näide 3:

Päisefail 'iostream' imporditakse ja kasutatakse nimeruumi 'std'. Kuna päisefailides on määratud palju funktsioone, impordime need C++ koodidesse. Siin loome funktsiooni 'ReturnRefFun()', kuhu asetame 'int& my_ref', mis tagastab viite. 'int& ReturnRefFun' on siin deklareeritud võrdlusfunktsioonina. Pärast seda suurendame muutuja 'my_ref' väärtust. Selle alla paneme 'tagasi', mis tagastab viite 'my_ref'.

Pärast seda käivitatakse siin meetod 'main()'. Seejärel initsialiseerime muutuja 'first_value' väärtusega '21'. Selle all tagastame viite koopia, asetades funktsiooni 'ReturnRefFun' 'first_value' ja salvestades selle muutujasse 'copied_value'. Seejärel prindime nii 'first_value' kui ka 'copied_value', kasutades 'cout'. Selle alla suurendame muutujat 'copied_value', asetades 'copied_value++'. Seejärel prindime pärast selle suurendamist 'copied_value' ja 'cout' abil 'first_value'. Pärast seda tagastame viite muutuja 'int& ref_value' lähtestamise abil 'ReturnRefFun(first_value)'.

Pärast seda prindime kopeeritud muutuja 'my_ref' väärtuse. Seejärel trükime muutuja 'first_value' väärtuse. Selle alla suurendame 'ref_value' väärtust, lisades 'ref_value++'. Selle alla trükime “ref_value” suurendatud väärtuse ja “cout” abil ka muutuja “first_value”. Kui 'ref_value' muudetakse, muutub ka 'first_value'.

Kood 3:

#include
kasutades nimeruumi std;
int & ReturnRefFun ( int & minu_ref ) {
minu_ref++;
tagasi minu_ref;
}
int main ( ) {
int esimene_väärtus = kakskümmend üks ;
int kopeeritud_väärtus =ReturnRefFun ( esimene_väärtus ) ;
cout << 'Esimene väärtus on:' << esimene_väärtus << endl;
cout << 'Kopeeritud väärtus on:' << kopeeritud_väärtus << endl;
kopeeritud_väärtus++;
cout << 'Koopiatud_väärtust suurendatakse: ' << kopeeritud_väärtus << endl;
cout << 'Esimene väärtus:' << esimene_väärtus << endl;
int & ref_value =ReturnRefFun ( esimene_väärtus ) ;
cout << 'Viite kopeeritud väärtus: ' << ref_value << endl;
cout << 'Esimene väärtus:' << esimene_väärtus << endl;
ref_value++;
cout << 'Võtteväärtust suurendatakse:' << ref_value << endl;
cout << 'Esimene väärtus:' << esimene_väärtus << endl;
tagasi 0 ;
}


Väljund:

Siin on eelmise koodi tulemus, kus kasutasime 'tagasiviite' tehnikat. Näide näitab erinevust võrdlusmuutuja duplikaadi tagastamise ja võrdlusmuutuja enda tagastamise vahel.

Näide 4:

Siin deklareeritakse 'int& rByRef' viitefunktsioonina, mis tagastab viitemuutuja. Me edastame 'int& data' sellele funktsioonile 'int& rByref()'. Siin trükime muutuja 'andmed' aadressi ja seejärel kasutame selle all olevat tagastamisviidet. Nüüd initsialiseerime muutuja 'x_var' pärast meetodi 'main()' käivitamist. Seejärel trükime siia 'x_var' aadressi, lisades '&x_var' lahtrisse 'cout'.

Selle all kasutame viitemuutujat, määrates 'rByref(x_var)' väärtusele 'int& y_var'. Seejärel trükime ka selle viitemuutuja „&y_var” aadressi. Selle all kopeerime muutuja 'x_var' muutujasse 'z_var' ja prindime ka selle kopeeritud muutuja aadressi, mis on '&z_var'. Pärast seda kutsume funktsiooni 'rByref()', edastame selle sees parameetrina muutuja 'x_var' ja määrame sellele muutujale '93'. Samuti renderdame uuesti 'x_var' aadressi, lisades '&x_var' lahtrisse 'cout'.

Kood 4:

#include
kasutades nimeruumi std;
int & rByref ( int & andmeid )
{
cout << 'Andmete aadress:' << & andmeid << endl;
tagasi andmed;
}
int main ( )
{
int x_var = 42 ;
cout << 'X_vari aadress:' << & x_var << endl;
int & y_var = rByref ( x_var ) ;
cout << 'Y_vari aadress:' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Z_vari aadress:' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'X_vari aadress:' << & x_var << endl;
tagasi 0 ;
}


Väljund:

Tulemus näitab, et kloonitud muutuja aadress 'z_var' erineb kõigist muudest asukohtadest, millele algne muutuja 'x_var' viitab.

Järeldus

Selles õpetuses käsitletakse üksikasjalikult „tagasiviite” kontseptsiooni. Saime teada, et 'tagasi viide' sarnaneb C++ programmeerimise 'osutitega'. Arutasime, et selleks, et näidata, milline funktsioon viite tagastab, tuleb funktsiooni tagastustüübiga kasutada sümbolit '&'. Illustreerisime mõningaid näiteid ja nende tulemusi ning mõistsime seda kontseptsiooni selles õpetuses.