Връща справка в C++

Vr Sa Spravka V C



C++ предоставя възможност за връщане на стойност или адрес чрез препратка, а не чрез указатели. Използването на препратки вместо указатели може да направи C++ програма по-лесна за четене и управление. В C++ препратките и указателите са тясно свързани помежду си. Основното разграничение е, че въпреки че препратките са просто алтернативно име, „псевдоним“ за друга променлива, указателите могат да се използват в операции като добавяне на стойности. Препратката е алтернативно име или дубликат на оригиналната стойност и се обозначава със символа „&“.

Пример 1:

Импортираме заглавния файл „iostream“ и след това използваме пространството от имена „std“. Заглавните файлове се импортират в C++ кодове, тъй като са дефинирани много функции. След това създаваме референтна функция за връщане, като поставяме символа „&“ с името на функцията „returnTheValue“.







Тук препратката „стойност“ вече е вмъкната. Под това отпечатваме стойността и адреса с референцията „&value“. След това поставяме референцията за връщане и поставяме „стойността“. Сега тук се извиква „main()“ и ние инициализираме „n1“ със стойност „44“. Под това „int& n2“ се инициализира с „returnTheValue(n1)“. Сега отпечатваме стойността на „n1“, както и неговия адрес. След това отпечатваме стойността на „n2“, както и адреса на „n2“, като използваме „cout“.



Код 1:



#include
използване на пространство от имена std;
вътр и returnTheValue ( вътр и стойност )
{
cout << 'Стойност = ' << стойност << endl
<< ' Адресът на стойността е '
<< и стойност << endl;
връщане стойност;
}
int main ( )
{
вие n1 = 44 ;
вътр и n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << endl
<< ' Адресът на n1 е '
<< и n1 << endl;
cout << 'n2 =' << n2 << endl
<< ' Адресът на n2 е '
<< и n2 << endl;
връщане 0 ;
}


Изход:





Тук можем да отбележим, че препратката е само алтернативно име на друга променлива, както е показано по-долу. Като адрес на стойността „n1“ и „n2“ никога не се променят.



Пример 2:

Използваме пространството от имена „std“ след импортиране на заглавния файл „iostream“. След това използваме името на функцията „MyReturnValueFunc“ и символа „&“, за да изградим референтна функция за връщане. Препратката към променливата „v1“ е поставена тук. Отпечатваме стойността и адреса с референцията „&v1“ под това. След това вмъкваме „препратка за връщане“, като използваме „връщане“ и „v1“ на това място. Тук се извиква “main()” и “num_1” се инициализира със стойността на “19”. Инициализирането на „int& num_2“ се извършва с „MyReturnValueFunc(num_1)“.

В момента отпечатваме стойността и адреса на „num_1“ и, използвайки „cout“, отпечатваме стойността и адреса на „num_2“. Сега променяме стойността на „num_1“, като използваме адреса, който се връща тук от „MyReturnValueFunc“. Тази функция връща алтернативното име на „v1“, което е и алтернативното име на „num_1“. И така, променяме стойността му и го задаваме на „91“. Присвояваме „91“ на „MyReturnValueFunc(num_1)“, което действа като псевдоним тук. След това отпечатваме отново стойността и адреса на „num_1“.

Код 2:

#include
използване на пространство от имена std;
вътр и MyReturnValueFunc ( вътр и v1 )
{
cout << 'Стойността на v1 = ' << v1 << endl
<< ' Адресът на променлива v1 е '
<< и v1 << endl;
връщане v1;
}
int main ( )
{
int num_1 = 19 ;
вътр и num_2 = MyReturnValueFunc ( брой_1 ) ;
cout << 'Стойността на num_1 = ' << брой_1 << endl
<< ' Адресът на num_1 е '
<< и брой_1 << endl;
cout << 'Стойността на num_2 = ' << номер_2 << endl
<< ' Адресът на num_2 е '
<< и номер_2 << endl;
MyReturnValueFunc ( брой_1 ) = 91 ;
cout << 'Сега стойността на num_1 = ' << брой_1 << endl
<< 'Адресът на num_1 е '
<< и брой_1 << endl;
връщане 0 ;
}


Изход:

Както е показано по-долу, можем да видим, че референцията е просто алтернативно име за друга променлива, тъй като адресът на стойностите „v1“, „num_1“ и „num_2“ остава постоянен:

Пример 3:

Заглавният файл „iostream“ се импортира и се използва пространството от имена „std“. Тъй като множество функции са посочени в заглавните файлове, ние ги импортираме в C++ кодовете. Тук създаваме функция „ReturnRefFun()“, в която поставяме „int& my_ref“, която връща препратката. „int& ReturnRefFun“ е декларирана тук като референтна функция. След това увеличаваме стойността на променливата 'my_ref'. Под това поставяме „return“, което връща референцията на „my_ref“.

След това тук се извиква методът “main()”. След това инициализираме променливата „first_value“ с „21“. Под това връщаме копието на препратката, като поставяме „first_value“ във функцията „ReturnRefFun“ и го запазваме в променливата „copied_value“. След това отпечатваме както „first_value“, така и „copied_value“, като използваме „cout“. Под това увеличаваме променливата „copied_value“, като поставяме „copied_value++“. След това отпечатваме „copied_value“, след като го увеличим, и „first_value“, използвайки „cout“. След това връщаме препратката с помощта на инициализиране на променливата „int& ref_value“ с „ReturnRefFun(first_value)“.

След това отпечатваме стойността на променливата “my_ref”, която копирахме. След това отпечатваме стойността на променливата “first_value”. Под това увеличаваме стойността на „ref_value“, като поставяме „ref_value++“. Под това отпечатваме увеличената стойност на „ref_value“, а също и променливата „first_value“ с помощта на „cout“. Когато „ref_value“ се промени, „first_value“ също ще се промени.

Код 3:

#include
използване на пространство от имена std;
вътр и ReturnRefFun ( вътр и my_ref ) {
my_ref++;
връщане my_ref;
}
int main ( ) {
вътр първа_стойност = двадесет и едно ;
вътр копирана_стойност =ReturnRefFun ( първа_стойност ) ;
cout << 'Първата стойност е:' << първа_стойност << endl;
cout << 'Копираната стойност е: ' << копирана_стойност << endl;
копирана_стойност++;
cout << 'Copied_value се увеличава: ' << копирана_стойност << endl;
cout << 'Първата стойност:' << първа_стойност << endl;
вътр и референтна_стойност =ReturnRefFun ( първа_стойност ) ;
cout << 'Референтната копирана стойност: ' << референтна_стойност << endl;
cout << 'Първата стойност:' << първа_стойност << endl;
реф_стойност++;
cout << 'Референтната стойност се увеличава: ' << референтна_стойност << endl;
cout << 'Първата стойност:' << първа_стойност << endl;
връщане 0 ;
}


Изход:

Ето резултата от предишния код, където използвахме техниката „връщане на препратка“. Примерът показва разликата между връщането на дубликат на референтната променлива и връщането на самата референтна променлива.

Пример 4:

Тук „int& rByRef“ е декларирана като референтна функция, която връща референтната променлива. Предаваме „int& data“ на тази функция „int& rByref()“. Тук отпечатваме адреса на променливата „данни“ и след това използваме обратната препратка под това. Сега инициализираме променливата “x_var” след извикване на метода “main()”. След това отпечатваме адреса на „x_var“ тук, като поставяме „&x_var“ в „cout“.

Под това използваме референтната променлива, като присвояваме „rByref(x_var)“ на „int& y_var“. След това отпечатваме и адреса на тази референтна променлива „&y_var“. Под това копираме променливата „x_var“ в променливата „z_var“ и също така отпечатваме адреса на тази копирана променлива, който е „&z_var“. След това извикваме функцията “rByref()”, предаваме променливата “x_var” като параметър в нея и присвояваме “93” на тази променлива. Също така изобразяваме отново адреса на „x_var“, като поставяме „&x_var“ в „cout“.

Код 4:

#include
използване на пространство от имена std;
вътр и rByref ( вътр и данни )
{
cout << 'Адрес на данните: ' << и данни << endl;
връщане данни;
}
int main ( )
{
int x_var = 42 ;
cout << 'Адрес на x_var: ' << и x_var << endl;
вътр и y_var = rByref ( x_var ) ;
cout << 'Адрес на y_var: ' << и y_var << endl;
int z_var = rByref ( x_var ) ;
cout << 'Адрес на z_var: ' << и z_var << endl;
rByref ( x_var ) = 93 ;
cout << 'Адрес на x_var: ' << и x_var << endl;
връщане 0 ;
}


Изход:

Резултатът изяснява, че адресът на клонираната променлива, „z_var“, се различава от всички останали местоположения, които оригиналната променлива, „x_var“, препраща.

Заключение

Концепцията за „връщане на препратка“ е разгледана подробно в този урок. Научихме, че „върната препратка“ е подобна на „указателите“ в програмирането на C++. Обсъдихме, че за да посочите коя функция връща препратка, символът „&“ трябва да се използва с типа на връщане на функцията. Ние илюстрирахме някои примери и техните резултати и разбрахме тази концепция в този урок.