Palauta viite C++:ssa

Palauta Viite C Ssa



C++ tarjoaa mahdollisuuden palauttaa arvon tai osoitteen viitteellä osoittimien sijaan. Viittausten käyttäminen osoittimien sijaan voi tehdä C++-ohjelmasta yksinkertaisemman luettavan ja hallittavan. C++:ssa viittaukset ja osoittimet liittyvät läheisesti toisiinsa. Ensisijainen ero on, että vaikka viittaukset ovat vain vaihtoehtoinen nimi, 'alias' toiselle muuttujalle, osoittimia voidaan käyttää toimissa, kuten arvojen lisäämisessä. Viite on vaihtoehtoinen nimi tai alkuperäisen arvon kopio, ja se on merkitty &-symbolilla.

Esimerkki 1:

Tuomme 'iostream'-otsikkotiedoston ja käytämme sitten 'std'-nimiavaruutta. Otsikkotiedostot tuodaan C++-koodeilla, koska monet funktiot on määritelty. Sitten luomme palautusviitefunktion asettamalla '&'-symbolin funktion nimeen 'returnTheValue'.







Täällä 'arvo'-viite on nyt lisätty. Tämän alle tulostetaan arvo ja osoite '&arvo'-viitteellä. Sitten asetamme palautusviitteen ja asetamme 'arvon'. Nyt 'main()' kutsutaan tässä, ja alustamme 'n1' arvolla '44'. Tämän alapuolella 'int& n2' alustetaan 'returnTheValue(n1)'. Nyt tulostamme 'n1':n arvon sekä sen osoitteen. Sitten tulostamme arvon 'n2' sekä osoitteen 'n2' käyttämällä 'cout'.



Koodi 1:



#include
käyttäen nimiavaruutta std;
int & returnTheValue ( int & arvo )
{
cout << 'Arvo =' << arvo << endl
<< 'Arvon osoite on'
<< & arvo << endl;
palata arvo;
}
int main ( )
{
sinä n1 = 44 ;
int & n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << endl
<< 'N1:n osoite on'
<< & n1 << endl;
cout << 'n2 =' << n2 << endl
<< 'N2:n osoite on'
<< & n2 << endl;
palata 0 ;
}


Lähtö:





Tässä voimme huomata, että viittaus on vain toisen muuttujan vaihtoehtoinen nimi, kuten seuraavassa esitetään. Arvon osoitteena 'n1' ja 'n2' eivät koskaan muutu.



Esimerkki 2:

Käytämme 'std'-nimiavaruutta 'iostream'-otsikkotiedoston tuomisen jälkeen. Seuraavaksi käytämme funktion nimeä 'MyReturnValueFunc' ja '&'-symbolia palauttamaan viitefunktion. Viittaus 'v1'-muuttujaan on sijoitettu tähän. Tulostamme arvon ja osoitteen '&v1'-viittauksella tämän alle. Seuraavaksi lisäämme 'palautusviitteen' käyttämällä 'return' ja 'v1' tässä paikassa. Tässä kutsutaan 'main()' ja 'num_1' alustetaan arvolla '19'. Kohteen 'int& num_2' alustus tehdään 'MyReturnValueFunc(num_1)' -komennolla.

Tällä hetkellä tulostamme 'num_1':n arvon ja osoitteen sekä 'cout'-komennolla 'num_2' arvon ja osoitteen. Muutamme nyt arvon 'num_1' käyttämällä osoitetta, jonka 'MyReturnValueFunc' palauttaa tähän. Tämä funktio palauttaa vaihtoehtoisen nimen 'v1', joka on myös vaihtoehtoinen nimi 'num_1'. Joten muutamme sen arvoa ja asetamme sen arvoon '91'. Määritämme '91' kohtaan 'MyReturnValueFunc(num_1)', joka toimii aliaksena tässä. Sitten tulostamme arvon uudelleen ja osoitteen 'num_1'.

Koodi 2:

#include
käyttäen nimiavaruutta std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'V1:n arvo =' << v1 << endl
<< 'V1-muuttujan osoite on'
<< & v1 << endl;
palata v1;
}
int main ( )
{
int numero_1 = 19 ;
int & num_2 = MyReturnValueFunc ( numero_1 ) ;
cout << 'Arvo numero_1 = ' << numero_1 << endl
<< ' Num_1:n osoite on'
<< & numero_1 << endl;
cout << 'Arvo numero_2 = ' << numero_2 << endl
<< ' Num_2:n osoite on'
<< & numero_2 << endl;
MyReturnValueFunc ( numero_1 ) = 91 ;
cout << 'Nyt, arvo numero_1 = ' << numero_1 << endl
<< 'Num_1:n osoite on'
<< & numero_1 << endl;
palata 0 ;
}


Lähtö:

Kuten seuraavassa osoitetaan, voimme nähdä, että viittaus on vain vaihtoehtoinen nimi toiselle muuttujalle, koska 'v1', 'num_1' ja 'num_2'-arvojen osoite pysyi vakiona:

Esimerkki 3:

'iostream'-otsikkotiedosto tuodaan ja 'std'-nimiavaruutta käytetään. Koska otsikkotiedostoissa on määritetty lukuisia toimintoja, tuomme ne C++-koodeihin. Täällä luomme 'ReturnRefFun()' -funktion, johon sijoitamme 'int& my_ref', joka palauttaa viitteen. 'int& ReturnRefFun' on ilmoitettu tässä viitefunktiona. Tämän jälkeen lisäämme 'my_ref'-muuttujan arvoa. Tämän alle laitamme 'return', joka palauttaa viitteen 'my_ref'.

Tämän jälkeen tässä vedetään 'main()'-menetelmä. Sitten alustamme 'first_value'-muuttujan arvolla '21'. Tämän alapuolelle palautetaan kopio viitteestä asettamalla 'first_value' 'ReturnRefFun'-funktioon ja tallennetaan se 'copied_value'-muuttujaan. Sitten tulostetaan sekä 'first_value' että 'copied_value' käyttämällä 'cout'. Tämän alapuolelle lisäämme 'copied_value'-muuttujaa sijoittamalla 'copied_value++'. Sitten tulostetaan 'copied_value' lisättyään sitä ja 'first_value' käyttämällä 'cout'. Tämän jälkeen palautetaan viittaus alustamalla 'int& ref_value' -muuttuja 'ReturnRefFun(first_value)'.

Tämän jälkeen tulostamme kopioimamme 'my_ref'-muuttujan arvon. Sitten tulostamme 'first_value' -muuttujan arvon. Tämän alapuolelle lisäämme 'ref_value'-arvon asettamalla 'ref_value++'. Tämän alapuolelle tulostetaan 'ref_value':n lisätty arvo sekä 'first_value'-muuttuja 'cout'-apulla. Kun 'ref_value' muuttuu, 'first_value' muuttuu myös.

Koodi 3:

#include
käyttäen nimiavaruutta std;
int & ReturnRefFun ( int & my_ref ) {
my_ref++;
palata my_ref;
}
int main ( ) {
int ensimmäinen_arvo = kaksikymmentäyksi ;
int kopioitu_arvo =ReturnRefFun ( ensimmäinen_arvo ) ;
cout << 'Ensimmäinen arvo on:' << ensimmäinen_arvo << endl;
cout << 'Kopioitu arvo on:' << kopioitu_arvo << endl;
kopioitu_arvo++;
cout << 'Copied_value kasvaa: ' << kopioitu_arvo << endl;
cout << 'Ensimmäinen arvo:' << ensimmäinen_arvo << endl;
int & ref_value =ReturnRefFun ( ensimmäinen_arvo ) ;
cout << 'Viite kopioitu arvo: ' << ref_value << endl;
cout << 'Ensimmäinen arvo:' << ensimmäinen_arvo << endl;
ref_value++;
cout << 'Viitearvoa kasvatetaan:' << ref_value << endl;
cout << 'Ensimmäinen arvo:' << ensimmäinen_arvo << endl;
palata 0 ;
}


Lähtö:

Tässä on tulos edellisestä koodista, jossa käytimme 'paluuviittaus' -tekniikkaa. Esimerkki näyttää eron viitemuuttujan kaksoiskappaleen ja itse viitemuuttujan palauttamisen välillä.

Esimerkki 4:

Tässä 'int& rByRef' on ilmoitettu viitefunktioksi, joka palauttaa viitemuuttujan. Välitämme 'int& data' tälle 'int& rByref()' -funktiolle. Tässä tulostetaan 'data'-muuttujan osoite ja hyödynnetään sitten tämän alla olevaa palautusviitettä. Nyt alustamme 'x_var'-muuttujan 'main()'-menetelmän käynnistämisen jälkeen. Sitten tulostamme 'x_var' -osoitteen tähän laittamalla '&x_var' kohtaan 'cout'.

Tämän alla käytämme viitemuuttujaa määrittämällä 'rByref(x_var)' 'int& y_var' -muuttujaan. Sitten tulostamme myös kyseisen '&y_var'-viitemuuttujan osoitteen. Tämän alapuolelle kopioimme muuttujan 'x_var' muuttujaan 'z_var' ja tulostamme myös tämän kopioidun muuttujan osoitteen, joka on '&z_var'. Tämän jälkeen kutsumme 'rByref()'-funktiota, välitämme muuttujan 'x_var' parametriksi sen sisällä ja annamme tälle muuttujalle '93'. Muodostamme myös 'x_var':n osoitteen uudelleen laittamalla '&x_var' -tekstiin 'cout'.

Koodi 4:

#include
käyttäen nimiavaruutta std;
int & rByref ( int & tiedot )
{
cout << 'Tietojen osoite:' << & tiedot << endl;
palata tiedot;
}
int main ( )
{
int x_var = 42 ;
cout << 'X_varin osoite:' << & x_var << endl;
int & y_var = rByref ( x_var ) ;
cout << 'Y_varin osoite:' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Z_varin osoite:' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'X_varin osoite:' << & x_var << endl;
palata 0 ;
}


Lähtö:

Tulos tekee selväksi, että kloonatun muuttujan osoite 'z_var' eroaa kaikista muista paikoista, joihin alkuperäinen muuttuja 'x_var' viittaa.

Johtopäätös

Tässä opetusohjelmassa tarkastellaan yksityiskohtaisesti 'paluuviittauksen' käsitettä. Opimme, että 'paluuviittaus' on samanlainen kuin C++-ohjelmoinnin 'osoittimet'. Keskustelimme siitä, että sen osoittamiseksi, mikä funktio palauttaa viitteen, '&'-symbolia on käytettävä funktion palautustyypin kanssa. Havainnollistimme joitain esimerkkejä ja niiden tuloksia ja ymmärsimme tämän käsitteen tässä opetusohjelmassa.