Atgriezt atsauci C++ valodā

Atgriezt Atsauci C Valoda



C++ nodrošina iespēju atgriezt vērtību vai adresi, izmantojot atsauci, nevis norādes. Izmantojot atsauces, nevis rādītājus, C++ programmu var vieglāk lasīt un pārvaldīt. Programmā C++ atsauces un norādes ir cieši saistītas viena ar otru. Galvenā atšķirība ir tāda, ka, lai gan atsauces ir tikai alternatīvs nosaukums, cita mainīgā “alias”, norādes var izmantot tādās darbībās kā vērtību pievienošana. Atsauce ir alternatīvs nosaukums vai sākotnējās vērtības dublikāts, un to apzīmē ar simbolu “&”.

1. piemērs:

Mēs importējam “iostream” galvenes failu un pēc tam izmantojam “std” nosaukumvietu. Galvenes faili tiek importēti C++ kodos, jo ir definētas daudzas funkcijas. Pēc tam mēs izveidojam atgriešanas atsauces funkciju, ievietojot simbolu “&” ar funkcijas nosaukumu “returnTheValue”.







Šeit tagad ir ievietota atsauce “vērtība”. Zem tā mēs izdrukājam vērtību un adresi ar atsauci “&value”. Pēc tam mēs ievietojam atgriešanas atsauci un ievietojam 'vērtību'. Tagad šeit tiek izsaukts “main()”, un mēs inicializējam “n1” ar vērtību “44”. Zem tā “int& n2” tiek inicializēts ar “returnTheValue(n1)”. Tagad mēs izdrukājam “n1” vērtību, kā arī tā adresi. Pēc tam mēs izdrukājam “n2” vērtību, kā arī “n2” adresi, izmantojot “cout”.



1. kods:



#include
izmantojot namespace std;
starpt & returnTheValue ( starpt & vērtību )
{
cout << 'Vērtība =' << vērtību << endl
<< 'Vērtības adrese ir'
<< & vērtību << endl;
atgriezties vērtība;
}
int galvenais ( )
{
tu n1 = 44 ;
starpt & n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << endl
<< 'N1 adrese ir'
<< & n1 << endl;
cout << 'n2 = ' << n2 << endl
<< 'N2 adrese ir'
<< & n2 << endl;
atgriezties 0 ;
}


Izvade:





Šeit mēs varam atzīmēt, ka atsauce ir tikai cita mainīgā alternatīvs nosaukums, kā parādīts tālāk. Kā vērtības adrese “n1” un “n2” nekad nemainās.



2. piemērs:

Mēs izmantojam “std” nosaukumvietu pēc “iostream” galvenes faila importēšanas. Tālāk mēs izmantojam funkcijas nosaukumu “MyReturnValueFunc” un simbolu “&”, lai izveidotu atgriešanas atsauces funkciju. Šeit ir ievietota atsauce uz mainīgo “v1”. Mēs izdrukājam vērtību un adresi ar atsauci “&v1” zem tās. Pēc tam mēs ievietojam “atgriešanās atsauci”, šajā vietā izmantojot “return” un “v1”. Šeit tiek izsaukts “main()”, un “num_1” tiek inicializēts ar vērtību “19”. “int& num_2” inicializācija tiek veikta ar “MyReturnValueFunc(num_1)”.

Pašlaik mēs drukājam “num_1” vērtību un adresi un, izmantojot “cout”, mēs izdrukām “num_2” vērtību un adresi. Tagad mēs mainām “num_1” vērtību, izmantojot adresi, ko šeit atgriež “MyReturnValueFunc”. Šī funkcija atgriež alternatīvo nosaukumu “v1”, kas ir arī alternatīvais nosaukums “num_1”. Tātad, mēs mainām tā vērtību un iestatām to uz “91”. Mēs piešķiram “91” “MyReturnValueFunc(num_1)”, kas šeit darbojas kā aizstājvārds. Pēc tam mēs vēlreiz izdrukājam vērtību un “num_1” adresi.

2. kods:

#include
izmantojot namespace std;
starpt & MyReturnValueFunc ( starpt & v1 )
{
cout << 'V1 vērtība = ' << v1 << endl
<< 'V1 mainīgā adrese ir'
<< & v1 << endl;
atgriezties v1;
}
int galvenais ( )
{
int skaits_1 = 19 ;
starpt & num_2 = MyReturnValueFunc ( num_1 ) ;
cout << 'Num_1 vērtība = ' << num_1 << endl
<< 'Num_1 adrese ir'
<< & num_1 << endl;
cout << 'Num_2 vērtība = ' << num_2 << endl
<< 'Num_2 adrese ir'
<< & num_2 << endl;
MyReturnValueFunc ( num_1 ) = 91 ;
cout << 'Tagad num_1 vērtība = ' << num_1 << endl
<< 'Num_1 adrese ir'
<< & num_1 << endl;
atgriezties 0 ;
}


Izvade:

Kā parādīts tālāk, mēs varam redzēt, ka atsauce ir tikai cita mainīgā alternatīvs nosaukums, jo vērtību “v1”, “num_1” un “num_2” adrese palika nemainīga:

3. piemērs:

Tiek importēts “iostream” galvenes fails un tiek izmantota nosaukumvieta “std”. Tā kā galvenes failos ir norādītas daudzas funkcijas, mēs tās importējam C++ kodos. Šeit mēs izveidojam funkciju “ReturnRefFun()”, kurā ievietojam “int& my_ref”, kas atgriež atsauci. 'int& ReturnRefFun' šeit tiek deklarēta kā atsauces funkcija. Pēc tam mēs palielinām mainīgā “my_ref” vērtību. Zem tā mēs ievietojam “return”, kas atgriež atsauci uz “my_ref”.

Pēc tam šeit tiek izsaukta metode “main()”. Pēc tam mēs inicializējam mainīgo “first_value” ar “21”. Zem tā mēs atgriežam atsauces kopiju, funkcijā “ReturnRefFun” ievietojot “first_value” un saglabājam to mainīgajā “copied_value”. Pēc tam mēs izdrukājam gan “first_value”, gan “copied_value”, izmantojot “cout”. Zem tā mēs palielinām mainīgo “copied_value”, ievietojot “copied_value++”. Pēc tam mēs izdrukājam “copied_value” pēc tā palielināšanas un “first_value”, izmantojot “cout”. Pēc tam mēs atgriežam atsauci, inicializējot mainīgo “int& ref_value” ar “ReturnRefFun(first_value)”.

Pēc tam mēs izdrukājam nokopētā mainīgā “my_ref” vērtību. Pēc tam mēs izdrukājam mainīgā “first_value” vērtību. Zem tā mēs palielinām “ref_value” vērtību, ievietojot “ref_value++”. Zem tā mēs izdrukām palielināto “ref_value” vērtību un arī mainīgo “first_value” ar “cout” palīdzību. Mainot vērtību “ref_value”, mainīsies arī “first_value”.

3. kods:

#include
izmantojot namespace std;
starpt & ReturnRefFun ( starpt & my_ref ) {
my_ref++;
atgriezties my_ref;
}
int galvenais ( ) {
starpt pirmā_vērtība = divdesmitviens ;
starpt kopētā_vērtība =ReturnRefFun ( pirmā_vērtība ) ;
cout << 'Pirmā vērtība ir:' << pirmā_vērtība << endl;
cout << 'Kopētā vērtība ir:' << kopētā_vērtība << endl;
kopētā_vērtība++;
cout << 'Kopētā_vērtība tiek palielināta: ' << kopētā_vērtība << endl;
cout << 'Pirmā vērtība:' << pirmā_vērtība << endl;
starpt & ref_value =ReturnRefFun ( pirmā_vērtība ) ;
cout << 'Atsauces kopētā vērtība: ' << ref_value << endl;
cout << 'Pirmā vērtība:' << pirmā_vērtība << endl;
ref_value++;
cout << 'Atsauces vērtība tiek palielināta:' << ref_value << endl;
cout << 'Pirmā vērtība:' << pirmā_vērtība << endl;
atgriezties 0 ;
}


Izvade:

Šeit ir iepriekšējā koda rezultāts, kurā mēs izmantojām “atgriešanas atsauces” paņēmienu. Piemērā parādīta atšķirība starp atsauces mainīgā dublikāta atgriešanu un paša atsauces mainīgā atgriešanu.

4. piemērs:

Šeit “int& rByRef” tiek deklarēta kā atsauces funkcija, kas atgriež atsauces mainīgo. Mēs nododam “int& data” šai funkcijai “int& rByref()”. Šeit mēs izdrukājam mainīgā “datu” adresi un pēc tam izmantojam zemāk esošo atgriešanas atsauci. Tagad mēs inicializējam mainīgo “x_var” pēc metodes “main()” izsaukšanas. Pēc tam mēs šeit izdrukājam “x_var” adresi, laukā “cout” ievietojot “&x_var”.

Zem tā mēs izmantojam atsauces mainīgo, piešķirot “rByref(x_var)” “int& y_var”. Pēc tam mēs arī izdrukājam šī atsauces mainīgā “&y_var” adresi. Zem tā mēs kopējam mainīgo “x_var” mainīgajā “z_var”, kā arī izdrukājam šī kopētā mainīgā adresi, kas ir “&z_var”. Pēc tam mēs izsaucam funkciju “rByref()”, nododam mainīgo “x_var” kā parametru tajā un piešķiram šim mainīgajam “93”. Mēs arī atkal renderējam “x_var” adresi, ievietojot “&x_var” laukā “cout”.

4. kods:

#include
izmantojot namespace std;
starpt & rByref ( starpt & datus )
{
cout << 'Datu adrese:' << & datus << endl;
atgriezties dati;
}
int galvenais ( )
{
int x_var = 42 ;
cout << 'X_var adrese:' << & x_var << endl;
starpt & y_var = rByref ( x_var ) ;
cout << 'Y_var adrese:' << & y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Z_var adrese:' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'X_var adrese:' << & x_var << endl;
atgriezties 0 ;
}


Izvade:

Rezultāts skaidri parāda, ka klonētā mainīgā adrese “z_var” atšķiras no visām pārējām vietām, uz kurām atsaucas sākotnējais mainīgais “x_var”.

Secinājums

Šajā apmācībā ir detalizēti izpētīts “atgriešanās atsauces” jēdziens. Mēs uzzinājām, ka “atgriešanas atsauce” ir līdzīga C++ programmēšanas “rādītājiem”. Mēs apspriedām, ka, lai norādītu, kura funkcija atgriež atsauci, kopā ar funkcijas atgriešanas veidu ir jāizmanto simbols “&”. Mēs ilustrējām dažus piemērus un to rezultātus un sapratām šo koncepciju šajā apmācībā.