Pass Ciąg przez odniesienie w C ++

Pass Ciąg przez odniesienie w C ++
Odniesienie C ++ to nazwa zmiennej, która już istnieje. Odniesienia do zmiennej nie można zmienić w celu odniesienia się do drugiej zmiennej po zainicjowaniu. Wskaźniki lub odniesienia mogą być przekazywane jako parametry do funkcji w C++. Zatem wynik jest identyczny w obu okolicznościach. Przejście przez odniesienie umożliwia funkcję aktualizację zmiennej bez tworzenia kopii. Musimy zadeklarować zmienne odniesienia, aby parametr i zmienna były przekazywane w celu udostępnienia tej samej lokalizacji pamięci. Wszelkie zmiany występujące w parametrze również wpływają na zmienną.

Za pomocą przykładów zrozumiemy podejście C ++ przez podejście odniesienia i sposób dostarczenia wskazówek jako argumentów do funkcji w tym artykule. Parametry przekazywane do funkcji jako wskaźniki są takie same jak każda inna wartość podczas przekazywania wartości przez odniesienie. W rezultacie musisz podać typy wskaźników dla argumentów funkcji, jak w funkcji Swap (), która zamienia wartości różnych zmiennych liczb całkowitych rozwiązywanych przez ich argumenty.

Przykład 1: Program przejścia przez odniesienie bez wskazówek w C++

Tutaj przekazujemy wartość przez odniesienie bez korzystania z deklaracji wskaźnika. Poniżej znajduje się program ilustracyjny przekazywania zmiennej przez odniesienie.

Początkowo zamieściliśmy pliki nagłówka do implementacji programu w sekcji nagłówka. W następnym kroku mamy definicję funkcji do wymiany wartości. Funkcja otrzymuje wymianę nazwy, a funkcja przyjmuje dwa odniesienia zmienne ciągów jako parametr. Zmienne strunowe, które zastosuje funkcja swapu, są zdefiniowane jako „str1” i „str2”.

Następnie w funkcji stworzyliśmy zmienną „Temp”, którą przekazaliśmy zmienną „STR1”. Następnie „STR2” jest przypisany do „STR1”, a następnie „STR2” ma „STR2”. W ten sposób algorytm zamiany jest stosowany do ciągu odniesienia.

Mamy naszą główną funkcję, w której dwa ciągi są deklarowane jako „str_a” i „str_b” i inicjowane z niektórymi wartościami ciągów. Wartości ciągu zostaną wydrukowane przed zastosowaniem funkcji swap. Następnie wywołaliśmy funkcję swap w funkcji głównej i przekazaliśmy ciąg zdefiniowany w funkcji głównej. Następnie zamieniony sznurek zostanie wydrukowany.

#włączać
za pomocą przestrzeni nazw Std;
void swap (String & Str1, String & Str2)
Temperatura ciągu;
temp = str1;
str1 = str2;
str2 = temp;

int main ()

string str_a = "c ++", str_b = "programowanie";
Cout<< "Strings Before swapping" <Cout<< "string 1 : " <Cout<< "String 2 : " <swap (str_a, str_b);
Cout<< "\nStrings After swapping" <Cout<< "string 1 : " <Cout<< "string 2 : " <powrót 0;

Wynik pokazuje ciąg przed zamianą i po zamianę przez ciąg odniesienia przekazany w funkcji.

Przykład 2: Program przekazania przez odniesienie z wskaźnikami w C++

Jak w poprzednim przykładzie, widzieliśmy przechodzący ciąg tylko przez odniesienie. Dlatego w tym przykładzie użyjemy wskaźników przez odniesienie w C ++.

Program zaczyna się od utworzenia funkcji reprezentowanej o nazwie „SwapString” i przekazuje sznurki dwupunktowe jako argument. Następnie nazwaliśmy główną funkcję programu. W głównej funkcji oba sznurki nazywane są odpowiednio „STR1” i „STR2”. Te zmienne ciągów są inicjowane ciągami słów.

Następnie nazwieliśmy funkcję „swapString”, do której przekazywane są adresy „str1” i „Str2”. Ciągi zostaną zamienione w tej definicji funkcji w głównej funkcji i wydrukowane. Następnie nazwali funkcję „swapString” poza główną funkcją zamiany określonych ciągów.

#włączać
za pomocą przestrzeni nazw Std;
void SwapString (String*, String*);
int main ()

String str1 = „Hello”, str2 = „Friends”;
Cout<< "Strings Before swapping" <Cout<< "Str1 = " << str1 <Cout<< "Str2 = " << str2<SwapString (& STR1, & STR2);
Cout<< "\nStrings After swapping" <Cout<< "str1 = " << str1 <Cout<< "str2 = " << str2 <powrót 0;

void SwapString (String* S1, String* s2)
Temperatura ciągu;
temp = *s1;
*s1 ​​= *s2;
*s2 = temp;

Stąd wyniki przechodzących odniesień do strun z wskaźnikami pokazano przy następującej grafice.

Przykład 3: Program przechodzącego obiektu ciągów przez odniesienie w C++

Nawet jeśli funkcja nie może modyfikować źródłowego obiektu ciągów w programie wywołującym, przekazywanie obiektów ciągów C ++ za pomocą odniesienia jest dość powszechne. Obiekty są zwykle dość duże, a zatem mogą być kosztowne w porównaniu z ilością przechowywania, którego używają i czas niezbędny do skonstruowania ich klonu podczas przekazywania ich według wartości. Ogólnie rzecz biorąc, przekazywanie obiektów przez odniesienie zapisuje zarówno pamięć, jak i czas.

Jedyną wadą przekazania obiektu przez odniesienie jest to, że może on zmienić obiekt źródłowy przekazany do funkcji. To nie jest pożądane. Jeśli nie chcemy aktualizować obiektu w funkcji, wolimy utrudnić.

Mamy definicję funkcji w następującym programie jako „InputString”, do którego przekazaliśmy odniesienie ciągów. Następnie zadeklarowaliśmy obiekt ciągów „MyStr” w głównej funkcji, a ciąg obiektu „MySTR” zawiera ciąg słowa.

Następnie nazwaliśmy „wejście” i przekazaliśmy w nim ten obiekt łańcuchowy. Mamy definicję funkcji „InputString” poza główną funkcją, która tworzy nowe odniesienie obiektu String z „MySt”. Nowy ciąg jest zdefiniowany jako „Newstr”, a następnie inicjowany w ciele funkcji. Zmodyfikowaliśmy ciąg obiektu „Newstr” i wydrukowaliśmy nowy obiekt String.

#włączać
#włączać
Używanie std :: cout;
Używanie std :: endl;
za pomocą std :: ciąg;
void InputString (String &);
int main ()

String myStr = "Wel";
Cout<< "String value: " <InputString (MyStr);
Cout<< "String value now :" <powrót 0;

void InputString (String & Newstr)

Cout<< "String value in function :" <NewStr = Newsttr + „Come”;
Cout<< "String value now in function :" <

Grafika poniżej reprezentuje wynikowe wartości ciągów ciągu źródłowego i zmienionego ciągu.

Przykład 4: Program przekazywania stałego obiektu ciągów przez odniesienie w C++

Kompilator rzuci usterkę, jeśli odniesienie zostanie przekazane do stałego obiektu. Możemy rozwiązać ten problem, używając stałego odniesienia zmiennej. Zapobiega to zmianie punktów odniesienia, na które punkty odniesienia.

Najpierw mamy definicję funkcji „Wyświetlacz”, w którym przekazywane jest stałe odniesienie do ciągu. Stałe ciągi są zdefiniowane i inicjowane w głównej funkcji jako „STR1” i „STR2”. Następnie przekaż te stałe ciągami do funkcji „Wprowadzenie”. Wywołał funkcję poza główną funkcją, w której zadeklarowaliśmy stałą zmienną ciągów „MyStr”.

#włączać
#włączać
Używanie std :: cout;
Używanie std :: endl;
za pomocą std :: ciąg;
void wyświetlacz (const string &);
int main ()

const String str1 = "InfInix";
String str2 = "iPhone";
Cout<< "str1 :" << str1 <Wyświetlacz (str1);
Cout<< "str2 : " << str2 <Wyświetlacz (STR2);
powrót 0;

void wyświetlacz (const String & Mystr)

Cout<< "MyStr : " <

Obiekt niezakłócony jest przekazywany do funkcji poprzez stałe odniesienie do obiektu. Więc nie otrzymujemy żadnych błędów kompilacji w kodzie.

Wniosek

Odniesienia umożliwiają funkcję wpływanie na wartość argumentu, co może być korzystne w niektórych sytuacjach. Natomiast odniesienia do stawki upewnij się, że funkcja nie zmienia argumentu. W ten sposób podsumowaliśmy ten artykuł tutaj z przykładową demonstracją w C ++ i mamy nadzieję, że może to być pomocne.