Jak implementovat volání odkazem v C ++



Tento článek vám poskytne podrobnou znalost Call by Reference v C ++ s implementacemi a jak se liší od Call by Value.

Práce s C ++ není obtížný úkol, pokud již máte zázemí v jazyce C, protože oba navzájem sdílejí spoustu konceptů. C ++ má ale některé koncepty, které nejsou součástí paradigmatu C. V tomto Call by Reference v článku C ++ si povíme o jednom takovém konceptu, kterým jsou referenční proměnné a jejich aplikace v následujícím pořadí:

Referenční proměnné

C ++ nám dává nový typ proměnné, tj. Referenční proměnnou. Můžeme si představit referenční proměnnou jako přezdívku pro naši původní proměnnou. To je přesná funkčnost referenční proměnné v jednom řádku.





Pokud se například jmenujete Harrison, ale doma, členové vaší rodiny vám říkají Harry. Pojďme si nyní projít několik podrobností o referenčních proměnných. Deklarace a použití tohoto typu proměnné se liší od obvyklých proměnných, které používáme, ale velmi podobné proměnným ukazatele.

Syntax:



int Hello = 1 int * ptr int & World = Hello

Když vytvoříme proměnnou „Hello“ obsahující hodnotu „1“, použije se segment paměti k boření hodnoty „1“, název tohoto segmentu bude „Hello“ a adresa tohoto segmentu bude například nějaká hexadecimální hodnota0x64. když píšemeint& Svět = Dobrý denJe vytvořena proměnná „svět“, která ukazuje na stejné místo v paměti.

Zahrnutí řádku World ++ provede změny na adrese 0x64, to znamená, že se změní také hodnota proměnné „Hello“. Někteří by mohli poukázat na to, jak se mají referenční proměnné odlišné od proměnných ukazatele, o kterých budeme diskutovat v druhé části tohoto příspěvku.

Volání podle hodnoty a volání podle odkazu v C ++

Výzva podle hodnoty: Call by Value je široce používaná metoda. Většinou budete používat přístup podle hodnoty, protože nechcete, aby se vaše původní hodnoty proměnných měnily. Proto jsme k volání funkce použili metodu volání podle hodnoty, předávají se pouze hodnoty proměnných. Toho je dosaženo vytvořením fiktivních proměnných v paměti.



#include using namespace std void add (int a, int b) {a = a + 10 b = b + 10 cout<<'Value of a = '<  Volání podle hodnoty v C ++

Z výše uvedeného obrázku vidíme, že jakmile zavoláme funkci add (), hodnoty proměnných xay se zkopírují do proměnných aab. A a b jsou fiktivní proměnné.

Volání podle odkazu: Nyní si promluvme o volání referenční metodou. V této metodě nejsou vytvořeny samostatné fiktivní proměnné, je metodě předán odkaz na již existující proměnnou. Tento odkaz ukazuje na stejné místo v paměti, proto se v paměti nevytvářejí samostatné kopie. Důležité je zde poznamenat, že změny provedené v referenčních proměnných se projeví ve fiktivní proměnné.

#include using namespace std void add (int & a, int & b) {a = a + 10 b = b + 10 cout<<'Value of a = '< int & min (int & a, int & b) {if (a 

Jak vidíme, výše uvedená funkce vypadá jinak ve srovnání s normálními funkcemi, protože návratový typ je „int &“. Tato funkce vrací odkaz na a nebo b v závislosti na podmínce. Důležité je zde poznamenat, že hodnotynejsou vráceny.

Pokud funkci zavoláme min (x, y) = 10. 10 bude přiřazeno k x, pokud je minimální, nebo k y, pokud je y minimální.

Volání podle referenčního vs ukazatele

Ve všech našich příkladech, které jsme viděli, jsme vždy přiřadili hodnotu referenční proměnné, kterou jsme vytvořili, protože referenční proměnné nemohou být NULL, zatímco proměnné ukazatele mohou být NULL a mohou způsobit neočekávané chyby.

Referenční proměnné nelze znovu přiřadit, zatímco proměnné ukazatele mohou později v programu ukazovat na nějakou jinou proměnnou.

Proměnná ukazatele obsahuje hodnotu adresy konkrétní proměnné, zatímco adresa referenční proměnné je stejná jako adresa proměnné, na kterou odkazuje.

S tímto se dostáváme na konec tohoto Call By Reference v článku C ++. Doufám, že jste porozuměli různým implementacím volání Value a reference a jak se oba liší.

Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Školicí a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java, spolu s různými rámci Java, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.