Zwróć odwołanie w C++

Zwroc Odwolanie W C



C++ zapewnia funkcję zwracania wartości lub adresu poprzez odwołanie, a nie wskaźniki. Używanie referencji zamiast wskaźników może sprawić, że program C++ będzie łatwiejszy w czytaniu i zarządzaniu. W C++ referencje i wskaźniki są ze sobą ściśle powiązane. Podstawowa różnica polega na tym, że chociaż referencje są jedynie alternatywną nazwą, „aliasem” innej zmiennej, wskaźników można używać w operacjach takich jak dodawanie wartości. Odniesienie to alternatywna nazwa lub duplikat oryginalnej wartości i jest oznaczona symbolem „&”.

Przykład 1:

Importujemy plik nagłówkowy „iostream”, a następnie wykorzystujemy przestrzeń nazw „std”. Pliki nagłówkowe importowane są w kodach C++ po zdefiniowaniu wielu funkcji. Następnie tworzymy funkcję referencyjną zwrotu, umieszczając symbol „&” przy nazwie funkcji „returnTheValue”.







W tym miejscu wstawiono teraz odniesienie do „wartości”. Poniżej drukujemy wartość i adres z odnośnikiem „&wartość”. Następnie umieszczamy referencję zwrotną i umieszczamy „wartość”. Teraz wywoływana jest tutaj funkcja „main()” i inicjujemy „n1” wartością „44”. Poniżej inicjuje się „int& n2” za pomocą „returnTheValue(n1)”. Teraz wypisujemy wartość „n1” i jej adres. Następnie drukujemy wartość „n2” oraz adres „n2” za pomocą „cout”.



Kod 1:



#include
używając przestrzeni nazw std;
wew & zwróćWartość ( wew & wartość )
{
cout << „Wartość =” << wartość << koniec
<< „Adres wartości to”
<< & wartość << koniec;
powrót wartość;
}
int główny ( )
{
ty n1 = 44 ;
wew & n2 = zwróćWartość ( n1 ) ;
cout << „n1 =” << n1 << koniec
<< „Adres n1 to”
<< & n1 << koniec;
cout << „n2 =” << n2 << koniec
<< „Adres n2 to”
<< & n2 << koniec;
powrót 0 ;
}


Wyjście:





W tym miejscu możemy zauważyć, że odwołanie to tylko alternatywna nazwa innej zmiennej, jak pokazano poniżej. Jako adres wartości „n1” i „n2” nigdy się nie zmieniają.



Przykład 2:

Przestrzeni nazw „std” używamy po zaimportowaniu pliku nagłówkowego „iostream”. Następnie używamy nazwy funkcji „MyReturnValueFunc” i symbolu „&”, aby zbudować funkcję referencyjną zwrotu. W tym miejscu znajduje się odniesienie do zmiennej „v1”. Drukujemy wartość i adres z odnośnikiem „&v1” pod spodem. Następnie wstawiamy „odniesienie do zwrotu”, wykorzystując w tym miejscu „return” i „v1”. Tutaj wywoływana jest funkcja „main()”, a wartość „num_1” inicjowana jest wartością „19”. Inicjalizacja „int& num_2” odbywa się za pomocą „MyReturnValueFunc(num_1)”.

Obecnie drukujemy wartość i adres „num_1”, a przy użyciu „cout” drukujemy wartość i adres „num_2”. Zmieniamy teraz wartość „num_1”, wykorzystując adres zwrócony tutaj przez „MyReturnValueFunc”. Ta funkcja zwraca alternatywną nazwę „v1”, która jest również alternatywną nazwą „num_1”. Zmieniamy więc jego wartość i ustawiamy na „91”. Przypisujemy „91” do „MyReturnValueFunc(num_1)”, który pełni tutaj rolę aliasu. Następnie ponownie drukujemy wartość i adres „num_1”.

Kod 2:

#include
używając przestrzeni nazw std;
wew & Funkcja MyReturnValue ( wew & v1 )
{
cout << „Wartość v1 =” << v1 << koniec
<< „Adres zmiennej v1 to”
<< & v1 << koniec;
powrót v1;
}
int główny ( )
{
int liczba_1 = 19 ;
wew & num_2 = MojaFunkcjaWartościZwrotu ( liczba_1 ) ;
cout << „Wartość num_1 =” << liczba_1 << koniec
<< ' Adres num_1 to '
<< & liczba_1 << koniec;
cout << „Wartość num_2 =” << liczba_2 << koniec
<< ' Adres num_2 to '
<< & liczba_2 << koniec;
Funkcja MyReturnValue ( liczba_1 ) = 91 ;
cout << „Teraz wartość num_1 = „ << liczba_1 << koniec
<< „Adres num_1 to”
<< & liczba_1 << koniec;
powrót 0 ;
}


Wyjście:

Jak pokazano poniżej, referencja jest jedynie alternatywną nazwą innej zmiennej, ponieważ adres wartości „v1”, „num_1” i „num_2” pozostał stały:

Przykład 3:

Importowany jest plik nagłówkowy „iostream” i używana jest przestrzeń nazw „std”. Ponieważ w plikach nagłówkowych określono wiele funkcji, importujemy je do kodów C++. Tutaj tworzymy funkcję „ReturnRefFun()”, w której umieszczamy „int& my_ref”, która zwraca referencję. Jako funkcję referencyjną zadeklarowano tutaj „int& ReturnRefFun”. Następnie zwiększamy wartość zmiennej „my_ref”. Poniżej umieściliśmy „return”, który zwraca odwołanie do „my_ref”.

Następnie wywoływana jest tutaj metoda „main()”. Następnie inicjujemy zmienną „pierwsza wartość” wartością „21”. Poniżej zwracamy kopię referencji, umieszczając „first_value” w funkcji „ReturnRefFun” i zapisując ją w zmiennej „copied_value”. Następnie drukujemy zarówno „pierwszą wartość”, jak i „skopiowaną wartość”, korzystając z „cout”. Poniżej zwiększamy zmienną „skopiowana_wartość”, umieszczając „skopiowaną wartość++”. Następnie drukujemy „skopiowaną wartość” po jej zwiększeniu i „pierwszą wartość” za pomocą „cout”. Następnie zwracamy referencję za pomocą inicjalizacji zmiennej „int& ref_value” za pomocą „ReturnRefFun(first_value)”.

Następnie wypisujemy wartość skopiowanej zmiennej „my_ref”. Następnie wypisujemy wartość zmiennej „pierwsza_wartość”. Poniżej zwiększamy wartość „ref_value”, wstawiając „ref_value++”. Poniżej drukujemy zwiększoną wartość „ref_value”, a także zmienną „first_value” za pomocą „cout”. Kiedy zmieni się „wartość_ref”, zmieni się także „pierwsza wartość”.

Kod 3:

#include
używając przestrzeni nazw std;
wew & ReturnRefZabawa ( wew & mój_ref ) {
mój_ref++;
powrót mój_ref;
}
int główny ( ) {
wew pierwsza_wartość = dwadzieścia jeden ;
wew skopiowana wartość =ReturnRefZabawa ( pierwsza_wartość ) ;
cout << „Pierwsza wartość to: „ << pierwsza_wartość << koniec;
cout << „Skopiowana wartość to: „ << skopiowana wartość << koniec;
skopiowana wartość++;
cout << „Skopiowana wartość jest zwiększana: „ << skopiowana wartość << koniec;
cout << „Pierwsza wartość:” << pierwsza_wartość << koniec;
wew & wartość_ref =ReturnRefZabawa ( pierwsza_wartość ) ;
cout << „Skopiowana wartość referencyjna: „ << wartość_ref << koniec;
cout << „Pierwsza wartość:” << pierwsza_wartość << koniec;
wartość_ref++;
cout << „Wartość odniesienia jest zwiększana:” << wartość_ref << koniec;
cout << „Pierwsza wartość:” << pierwsza_wartość << koniec;
powrót 0 ;
}


Wyjście:

Oto wynik poprzedniego kodu, w którym wykorzystaliśmy technikę „referencji zwrotnej”. Przykład pokazuje różnicę między zwracaniem duplikatu zmiennej referencyjnej a zwracaniem samej zmiennej referencyjnej.

Przykład 4:

Tutaj „int& rByRef” jest zadeklarowany jako funkcja referencyjna, która zwraca zmienną referencyjną. Przekazujemy „int& data” do tej funkcji „int& rByref()”. Tutaj drukujemy adres zmiennej „data”, a następnie wykorzystujemy poniższe odwołanie do zwrotu. Teraz inicjujemy zmienną „x_var” po wywołaniu metody „main()”. Następnie drukujemy tutaj adres „x_var”, wstawiając „&x_var” w „cout”.

Poniżej używamy zmiennej referencyjnej, przypisując „rByref(x_var)” do „int& y_var”. Następnie drukujemy również adres tej zmiennej referencyjnej „&y_var”. Poniżej kopiujemy zmienną „x_var” do zmiennej „z_var”, a także drukujemy adres skopiowanej zmiennej, czyli „&z_var”. Następnie wywołujemy funkcję „rByref()”, przekazujemy zmienną „x_var” jako parametr w jej wnętrzu i przypisujemy do tej zmiennej „93”. Renderujemy również ponownie adres „x_var”, umieszczając „&x_var” w „cout”.

Kod 4:

#include
używając przestrzeni nazw std;
wew & rByref ( wew & dane )
{
cout << „Adres danych:” << & dane << koniec;
powrót dane;
}
int główny ( )
{
int x_var = 42 ;
cout << 'Adres x_var: ' << & x_var << koniec;
wew & y_var = rByref ( x_var ) ;
cout << „Adres y_var:” << & y_var << koniec;
int z_var = rByref ( x_var ) ;
cout << 'Adres z_var: ' << & z_var << koniec;
rByref ( x_var ) = 93 ;
cout << 'Adres x_var: ' << & x_var << koniec;
powrót 0 ;
}


Wyjście:

Wynik jasno pokazuje, że adres sklonowanej zmiennej „z_var” różni się od wszystkich innych lokalizacji, do których odwołuje się oryginalna zmienna „x_var”.

Wniosek

Koncepcja „odniesienia zwrotnego” została szczegółowo omówiona w tym samouczku. Dowiedzieliśmy się, że „odniesienie zwrotne” jest podobne do „wskaźników” w programowaniu w C++. Omówiliśmy, że aby wskazać, która funkcja zwraca referencję, należy użyć symbolu „&” wraz z typem zwracanym przez funkcję. W tym samouczku zilustrowaliśmy kilka przykładów i ich wyników oraz zrozumieliśmy tę koncepcję.