Torna la referència en C++

Torna La Referencia En C



C++ proporciona una facilitat per retornar un valor o una adreça per la seva referència en lloc de punters. L'ús de referències en lloc de punters pot fer que un programa C++ sigui més senzill de llegir i gestionar. En C++, les referències i els punters estan estretament relacionats entre si. La distinció principal és que, tot i que les referències són només un nom alternatiu, 'àlies' per a una altra variable, els punters es poden utilitzar en operacions com ara afegir valors. Una referència és un nom alternatiu o duplicat del valor original i s'indica amb el símbol '&'.

Exemple 1:

Importem el fitxer de capçalera 'iostream' i després utilitzem l'espai de noms 'std'. Els fitxers de capçalera s'importen en codis C++ ja que es defineixen moltes funcions. A continuació, creem una funció de referència de retorn col·locant el símbol '&' amb el nom de la funció, 'returnTheValue'.







Aquí, ara s'insereix la referència 'valor'. A sota, imprimim el valor i l'adreça amb la referència '&valor'. A continuació, col·loquem la referència de retorn i col·loquem el 'valor'. Ara, aquí s'invoca el 'main()' i inicialitzem 'n1' amb el valor de '44'. A sota d'això, 'int& n2' s'inicialitza amb el 'returnTheValue(n1)'. Ara, imprimim el valor de 'n1' així com la seva adreça. A continuació, imprimim el valor de 'n2' així com l'adreça de 'n2' utilitzant el 'cout'.



Codi 1:



#inclou
utilitzant namespace std;
int & retornaElValor ( int & valor )
{
cout << 'Valor =' << valor << endl
<< 'L'adreça del valor és'
<< & valor << endl;
tornar valor;
}
int principal ( )
{
tu n1 = 44 ;
int & n2 = retornaElValor ( n1 ) ;
cout << 'n1 = ' << n1 << endl
<< 'L'adreça de n1 és'
<< & n1 << endl;
cout << 'n2 = ' << n2 << endl
<< 'L'adreça de n2 és'
<< & n2 << endl;
tornar 0 ;
}


Sortida:





Aquí, podem observar que una referència només és un nom alternatiu d'una altra variable, tal com es mostra a continuació. Com a adreça de valor, 'n1' i 'n2' no canvien mai.



Exemple 2:

Utilitzem l'espai de noms 'std' després d'importar el fitxer de capçalera 'iostream'. A continuació, utilitzem el nom de la funció 'MyReturnValueFunc' i el símbol '&' per crear una funció de referència de retorn. La referència a la variable 'v1' es col·loca aquí. Imprimim el valor i l'adreça amb la referència '&v1' a sota. A continuació, inserim la 'referència de retorn' utilitzant 'retorn' i 'v1' en aquesta ubicació. Aquí, s'anomena 'main()' i 'num_1' s'inicialitza amb el valor de '19'. La inicialització de 'int& num_2' es fa amb 'MyReturnValueFunc(num_1)'.

Actualment, imprimim el valor i l'adreça de 'num_1' i, utilitzant 'cout', imprimim el valor i l'adreça de 'num_2'. Ara canviem el valor de 'num_1' utilitzant l'adreça que retorna aquí per 'MyReturnValueFunc'. Aquesta funció retorna el nom alternatiu de 'v1', que també és el nom alternatiu de 'num_1'. Per tant, canviem el seu valor i el posem a '91'. Assignem '91' a 'MyReturnValueFunc(num_1)' que actua com a àlies aquí. A continuació, tornem a imprimir el valor i l'adreça de 'num_1'.

Codi 2:

#inclou
utilitzant namespace std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'El valor de v1 = ' << v1 << endl
<< ' L'adreça de la variable v1 és '
<< & v1 << endl;
tornar v1;
}
int principal ( )
{
int num_1 = 19 ;
int & num_2 = MyReturnValueFunc ( num_1 ) ;
cout << 'El valor de num_1 = ' << num_1 << endl
<< ' L'adreça de num_1 és '
<< & num_1 << endl;
cout << 'El valor de num_2 = ' << num_2 << endl
<< ' L'adreça de num_2 és '
<< & num_2 << endl;
MyReturnValueFunc ( num_1 ) = 91 ;
cout << 'Ara, el valor de num_1 = ' << num_1 << endl
<< 'L'adreça de num_1 és'
<< & num_1 << endl;
tornar 0 ;
}


Sortida:

Com es demostra a continuació, podem veure que una referència és només un nom alternatiu per a una altra variable, ja que l'adreça dels valors 'v1', 'num_1' i 'num_2' es va mantenir constant:

Exemple 3:

S'importa el fitxer de capçalera 'iostream' i s'utilitza l'espai de noms 'std'. Com que s'especifiquen nombroses funcions als fitxers de capçalera, les importem als codis C++. Aquí, creem una funció 'ReturnRefFun()' en la qual col·loquem 'int& my_ref' que retorna la referència. El 'int& ReturnRefFun' es declara aquí com a funció de referència. Després d'això, incrementem el valor de la variable 'my_ref'. A sota d'això, posem 'retorn' que retorna la referència de 'my_ref'.

Després d'això, aquí s'invoca el mètode 'main()'. A continuació, inicialitzem la variable 'first_value' amb '21'. Per sota d'això, retornem la còpia de la referència col·locant 'first_value' a la funció 'ReturnRefFun' i la desem a la variable 'copied_value'. A continuació, imprimim tant el 'first_value' com el 'copied_value' utilitzant el 'cout'. A sota d'això, incrementem la variable 'copied_value' col·locant el 'copied_value++'. A continuació, imprimim el 'copied_value' després d'incrementar-lo i el 'first_value' mitjançant 'cout'. Després d'això, retornem la referència amb l'ajuda d'inicialitzar la variable 'int& ref_value' amb 'ReturnRefFun(first_value)'.

Després d'això, imprimim el valor de la variable 'my_ref' que hem copiat. A continuació, imprimim el valor de la variable 'first_value'. A sota d'això, incrementem el valor de 'ref_value' posant 'ref_value++'. A sota d'això, imprimim el valor incrementat de 'ref_value' i també la variable 'first_value' amb l'ajuda de 'cout'. Quan es canvia el 'ref_value', el 'first_value' també canviarà.

Codi 3:

#inclou
utilitzant namespace std;
int & TornarRefFun ( int & la meva_ref ) {
my_ref++;
tornar la meva_ref;
}
int principal ( ) {
int primer_valor = 21 ;
int valor_copiat =ReturnRefFun ( primer_valor ) ;
cout << 'El primer valor és: ' << primer_valor << endl;
cout << 'El valor copiat és: ' << valor_copiat << endl;
valor_copiat++;
cout << 'El valor_copiat s'incrementa:' << valor_copiat << endl;
cout << 'El primer valor: ' << primer_valor << endl;
int & valor_ref =ReturnRefFun ( primer_valor ) ;
cout << 'El valor copiat de referència:' << valor_ref << endl;
cout << 'El primer valor: ' << primer_valor << endl;
valor_ref++;
cout << 'El valor de referència s'incrementa : ' << valor_ref << endl;
cout << 'El primer valor: ' << primer_valor << endl;
tornar 0 ;
}


Sortida:

Aquest és el resultat del codi anterior on vam utilitzar la tècnica de 'referència de retorn'. L'exemple mostra la distinció entre retornar un duplicat de la variable de referència i retornar la variable de referència en si.

Exemple 4:

Aquí, 'int& rByRef' es declara com la funció de referència que retorna la variable de referència. Passem les 'dades int&' a aquesta funció 'int& rByref()'. Aquí, imprimim l'adreça de la variable 'dades' i després utilitzem la referència de retorn a sota d'aquesta. Ara, inicialitzem la variable 'x_var' després d'invocar el mètode 'main()'. A continuació, imprimim l'adreça de 'x_var' aquí posant el '&x_var' al 'cout'.

A sota d'això, utilitzem la variable de referència assignant 'rByref(x_var)' a 'int& y_var'. Aleshores, també imprimim l'adreça d'aquesta variable de referència '&y_var'. A sota d'això, copiem la variable 'x_var' a la variable 'z_var' i també imprimim l'adreça d'aquesta variable copiada que és '&z_var'. Després d'això, cridem a la funció 'rByref()', passem la variable 'x_var' com a paràmetre dins d'ella i assignem '93' a aquesta variable. També tornem a representar l'adreça del 'x_var' posant el '&x_var' al 'cout'.

Codi 4:

#inclou
utilitzant namespace std;
int & rByref ( int & dades )
{
cout << 'Adreça de dades:' << & dades << endl;
tornar dades;
}
int principal ( )
{
int x_var = 42 ;
cout << 'Adreça de x_var:' << & x_var << endl;
int & y_var = rByref ( x_var ) ;
cout << 'Adreça de y_var:' << & i_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Adreça de z_var:' << & z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'Adreça de x_var:' << & x_var << endl;
tornar 0 ;
}


Sortida:

El resultat deixa clar que l'adreça de la variable clonada, 'z_var', difereix de totes les altres ubicacions a les quals fa referència la variable original, 'x_var'.

Conclusió

El concepte de 'referència de retorn' s'explora en aquest tutorial amb detall. Hem après que la 'referència de retorn' és similar als 'punters' de la programació C++. Hem comentat que per indicar quina funció retorna una referència, cal utilitzar el símbol '&' amb el tipus de retorn de la funció. Hem il·lustrat alguns exemples i els seus resultats i hem entès aquest concepte en aquest tutorial.