Référence de retour en C++

Reference De Retour En C



C++ offre la possibilité de renvoyer une valeur ou une adresse par sa référence plutôt que par des pointeurs. L’utilisation de références au lieu de pointeurs peut simplifier la lecture et la gestion d’un programme C++. En C++, les références et les pointeurs sont étroitement liés les uns aux autres. La principale distinction est que, bien que les références soient simplement un nom alternatif, un « alias » pour une autre variable, les pointeurs peuvent être utilisés dans des opérations telles que l'ajout de valeurs. Une référence est un nom alternatif ou une copie de la valeur d'origine et est indiquée par le symbole & .

Exemple 1:

Nous importons le fichier d'en-tête « iostream », puis utilisons l'espace de noms « std ». Les fichiers d'en-tête sont importés dans les codes C++ car de nombreuses fonctions sont définies. Ensuite, nous créons une fonction de référence de retour en plaçant le symbole « & » avec le nom de la fonction, « returnTheValue ».







Ici, la référence « valeur » est maintenant insérée. En dessous, nous imprimons la valeur et l'adresse avec la référence « &value ». Ensuite, nous plaçons la référence de retour et plaçons la « valeur ». Maintenant, le « main() » est invoqué ici, et nous initialisons « n1 » avec la valeur « 44 ». En dessous, « int& n2 » est initialisé avec « returnTheValue(n1) ». Maintenant, nous imprimons la valeur de « n1 » ainsi que son adresse. Ensuite, nous imprimons la valeur de « n2 » ainsi que l'adresse de « n2 » en utilisant le « cout ».



Codage 1 :



#include
en utilisant l'espace de noms std ;
int & renvoyerLaValeur ( int & valeur )
{
cout << 'Valeur = ' << valeur << fin
<< ' L'adresse de la valeur est '
<< & valeur << fin;
retour valeur;
}
int main ( )
{
tu n1 = 44 ;
int & n2 = retournerLaValeur ( n1 ) ;
cout << 'n1 = ' << n1 << fin
<< ' L'adresse de n1 est '
<< & n1 << fin;
cout << 'n2 = ' << n2 << fin
<< ' L'adresse de n2 est '
<< & n2 << fin;
retour 0 ;
}


Sortir:





Ici, nous pouvons noter qu'une référence n'est qu'un nom alternatif d'une autre variable, comme indiqué dans ce qui suit. En tant qu'adresse de valeur, « n1 » et « n2 » ne changent jamais.



Exemple 2 :

Nous utilisons l'espace de noms « std » après avoir importé le fichier d'en-tête « iostream ». Ensuite, nous utilisons le nom de la fonction « MyReturnValueFunc » et le symbole « & » pour créer une fonction de référence de retour. La référence à la variable « v1 » est placée ici. Nous imprimons la valeur et l'adresse avec la référence « &v1 » en dessous. Ensuite, nous insérons la « référence de retour » en utilisant « return » et « v1 » à cet emplacement. Ici, « main() » est appelé et « num_1 » est initialisé avec la valeur « 19 ». L'initialisation de « int& num_2 » se fait avec « MyReturnValueFunc(num_1) ».

Actuellement, nous imprimons la valeur et l'adresse de « num_1 » et, en utilisant « cout », nous imprimons la valeur et l'adresse de « num_2 ». Nous modifions maintenant la valeur de « num_1 » en utilisant l'adresse renvoyée ici par « MyReturnValueFunc ». Cette fonction renvoie le nom alternatif de « v1 » qui est également le nom alternatif de « num_1 ». Nous modifions donc sa valeur et la définissons sur « 91 ». Nous attribuons « 91 » à « MyReturnValueFunc(num_1) » qui fait ici office d'alias. Ensuite, nous imprimons à nouveau la valeur et l'adresse de « num_1 ».

Code 2 :

#include
en utilisant l'espace de noms std ;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'La valeur de v1 = ' << v1 << fin
<< ' L'adresse de la variable v1 est '
<< & v1 << fin;
retour v1 ;
}
int main ( )
{
int num_1 = 19 ;
int & num_2 = MaValeurRetourFunc ( num_1 ) ;
cout << 'La valeur de num_1 = ' << num_1 << fin
<< ' L'adresse de num_1 est '
<< & num_1 << fin;
cout << 'La valeur de num_2 = ' << num_2 << fin
<< ' L'adresse de num_2 est '
<< & num_2 << fin;
MyReturnValueFunc ( num_1 ) = 91 ;
cout << 'Maintenant, la valeur de num_1 = ' << num_1 << fin
<< 'L'adresse de num_1 est '
<< & num_1 << fin;
retour 0 ;
}


Sortir:

Comme démontré dans ce qui suit, nous pouvons voir qu'une référence est simplement un nom alternatif pour une autre variable puisque l'adresse des valeurs « v1 », « num_1 » et « num_2 » est restée constante :

Exemple 3 :

Le fichier d'en-tête « iostream » est importé et l'espace de noms « std » est utilisé. Puisque de nombreuses fonctions sont spécifiées dans les fichiers d’en-tête, nous les importons dans les codes C++. Ici, on crée une fonction « ReturnRefFun() » dans laquelle on place « int& my_ref » qui renvoie la référence. Le « int& ReturnRefFun » est déclaré ici comme fonction de référence. Après cela, nous incrémentons la valeur de la variable « my_ref ». En dessous, on met « return » qui renvoie la référence de « my_ref ».

Après cela, la méthode « main() » est invoquée ici. Ensuite, nous initialisons la variable « first_value » avec « 21 ». En dessous, nous renvoyons la copie de la référence en plaçant « first_value » dans la fonction « ReturnRefFun » et la sauvegardons dans la variable « copied_value ». Ensuite, nous imprimons à la fois la « first_value » ainsi que la « copied_value » en utilisant le « cout ». En dessous, nous incrémentons la variable « copied_value » en plaçant le « copied_value++ ». Ensuite, nous imprimons la « copied_value » après l'avoir incrémentée et la « first_value » en utilisant « cout ». Après cela, nous renvoyons la référence en initialisant la variable « int& ref_value » avec « ReturnRefFun(first_value) ».

Après cela, nous imprimons la valeur de la variable « my_ref » que nous avons copiée. Ensuite, nous imprimons la valeur de la variable « first_value ». En dessous, nous incrémentons la valeur de « ref_value » en mettant « ref_value++ ». En dessous, nous imprimons la valeur incrémentée de « ref_value » ainsi que la variable « first_value » à l'aide de « cout ». Lorsque la « ref_value » est modifiée, la « first_value » changera également.

Code 3 :

#include
en utilisant l'espace de noms std ;
int & RetourRefFun ( int & ma_réf ) {
ma_réf++;
retour ma_réf;
}
int main ( ) {
int première_valeur = vingt-et-un ;
int valeur_copiée =RetourRefFun ( première_valeur ) ;
cout << 'La première valeur est : ' << première_valeur << fin;
cout << 'La valeur copiée est : ' << valeur_copiée << fin;
valeur_copiée++ ;
cout << 'La valeur_copiée est incrémentée : ' << valeur_copiée << fin;
cout << 'La première valeur : ' << première_valeur << fin;
int & valeur_réf =RetourRefFun ( première_valeur ) ;
cout << 'La valeur copiée de référence : ' << valeur_réf << fin;
cout << 'La première valeur : ' << première_valeur << fin;
ref_value++;
cout << 'La valeur de référence est incrémentée : ' << valeur_réf << fin;
cout << 'La première valeur : ' << première_valeur << fin;
retour 0 ;
}


Sortir:

Voici le résultat du code précédent où nous avons utilisé la technique du « retour de référence ». L'exemple montre la distinction entre renvoyer un double de la variable de référence et renvoyer la variable de référence elle-même.

Exemple 4 :

Ici, « int& rByRef » est déclaré comme fonction de référence qui renvoie la variable de référence. Nous passons les « int& data » à cette fonction « int& rByref() ». Ici, nous imprimons l'adresse de la variable « data », puis utilisons la référence de retour en dessous. Maintenant, nous initialisons la variable « x_var » après avoir invoqué la méthode « main() ». Ensuite, nous imprimons ici l'adresse de « x_var » en mettant le « &x_var » dans le « cout ».

En dessous, nous utilisons la variable de référence en attribuant « rByref(x_var) » au « int& y_var ». Ensuite, nous imprimons également l'adresse de cette variable de référence « &y_var ». En dessous, nous copions la variable « x_var » dans la variable « z_var » et imprimons également l'adresse de cette variable copiée qui est « &z_var ». Après cela, nous appelons la fonction « rByref() », passons la variable « x_var » comme paramètre à l'intérieur et attribuons « 93 » à cette variable. Nous restituons également l'adresse du « x_var » en mettant le « &x_var » dans le « cout ».

Code 4 :

#include
en utilisant l'espace de noms std ;
int & rByref ( int & données )
{
cout << 'Adresse des données : ' << & données << fin;
retour données;
}
int main ( )
{
int x_var = 42 ;
cout << 'Adresse de x_var : ' << & x_var << fin;
int & y_var = rByref ( x_var ) ;
cout << 'Adresse de y_var : ' << & y_var << fin;
int z_var = rByref ( x_var ) ;
cout << 'Adresse de z_var : ' << & z_var << fin;
rByref ( x_var ) = 93 ;
cout << 'Adresse de x_var : ' << & x_var << fin;
retour 0 ;
}


Sortir:

Le résultat montre clairement que l’adresse de la variable clonée, « z_var », diffère de tous les autres emplacements auxquels la variable d’origine, « x_var », fait référence.

Conclusion

Le concept de « référence de retour » est exploré en détail dans ce didacticiel. Nous avons appris que la « référence de retour » est similaire aux « pointeurs » de la programmation C++. Nous avons expliqué que pour indiquer quelle fonction renvoie une référence, le symbole « & » doit être utilisé avec le type de retour de la fonction. Nous avons illustré quelques exemples et leurs résultats et compris ce concept dans ce tutoriel.