references c
Spoznajte spôsoby, ako vyhlásiť a používať referencie v C ++.
Referencia je hlavným pojmom v programovacom jazyku C ++. Aj keď to nie je také silné ako ukazovatele, umožňuje nám ho používať na písanie efektívnych programov. Hlavné použitie referenčnej premennej je pri odovzdávaní parametrov funkciám.
Populárna technika odovzdávania parametrov „pass by reference“ využíva referencie. V tomto návode uvidíme, čo je to referencia a ako ju vyhlásiť a použiť. Budeme tiež diskutovať o rozdieloch medzi ukazovateľmi a odkazmi, ako aj o odovzdávaní a vracaní odkazov na / z funkcií.
=> Ak chcete preskúmať celý zoznam výukových programov C ++, prečítajte si tu.
Čo sa dozviete:
- Čo je to referencia?
- Deklarovanie referenčných premenných
- Referenčné ukazovatele Vs
- Odovzdávanie odkazov na funkcie
- Vrátenie referencií
- Záver
- Odporúčané čítanie
Čo je to referencia?
Odkaz je alias alebo iný názov premennej. Vzhľadom na premennú s identifikátorom môžeme tejto premennej poskytnúť ďalší identifikátor, aby sme na ňu mohli odkazovať buď s jej pôvodným názvom, alebo s iným názvom. Tento „iný názov“ sa nazýva referencia.
Uvažujme, že máme premennú ‘i’ s hodnotou 17. Ak j je referencia, potom sa nižšie zobrazuje pamäťová reprezentácia premennej i a referencie j.
Ako je znázornené na obrázku vyššie, premenná a jej alias, tj referenčný bod, majú rovnakú hodnotu.
Deklarovanie referenčných premenných
Referenciu je možné deklarovať pomocou operátora „&“.
Vyhlásenie o referencii je uvedené nižšie.
int a = 10; int& refvar = a;
Takže vo vyššie uvedenom kóde sme deklarovali celočíselnú premennú s hodnotou 10. Potom deklarujeme inú premennú refvar a priradíme jej premennú. Upozorňujeme, že pri deklarácii refvar sme použili operátor & tesne pred názvom premennej. To naznačuje, že refvar je odkaz na už existujúcu premennú.
Na premennú ‘a‘ môžeme odkazovať buď pomocou názvu premennej a, alebo pomocou referenčného názvu „refvar“.
ako sa robí protipožiarna stena
Ďalej je uvedený jednoduchý príklad referencií:
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< Výkon:
Vek: 22 rokov
Počet rokov: 22
Plat: 10 000
Mzdy: 10 000
Vo vyššie uvedenom kóde máme celočíselnú premennú vek. Ďalej deklarujeme celočíselnú premennú numYears na premennú vek. Máme ďalší variabilný plat typu double. Ďalej deklarujeme dvojitú referenčnú premennú mzdu na premennú mzdu.
Ďalej vytlačíme premenné, najskôr vek, potom jeho referencia, nasleduje plat a jej referencia. Ak skontrolujeme výstup programu, chápeme, že premenná a odkaz na ňu smerujú k rovnakej hodnote, a teda vek a počet rokov, rovnako ako plat a mzdy, majú rovnaké hodnoty.
Referenčné ukazovatele Vs
V porovnaní s ukazovateľmi sú odkazy bezpečnejšie a ľahšie sa používajú.
Budeme diskutovať o niekoľkých rozdieloch medzi ukazovateľmi a odkazmi:
ako otvárať súbory .jar
- Na rozdiel od ukazovateľov nemôžu mať odkazy nulovú hodnotu. Pre referencie je povinné mať priradenú hodnotu.
- Referencie sa inicializujú v okamihu ich vytvorenia. Na rozdiel od toho je možné ukazovatele inicializovať kedykoľvek a nie nevyhnutne počas deklarácie.
- Ukazovatele je možné ľahko priradiť k hodnotám. Ale s odkazmi to nemôžeme urobiť. Len čo je hodnota premennej priradená, t. J. Po vytvorení aliasu premennej, nemôžeme tejto referencii priradiť inú premennú.
- Nemáme neplatné odkazy. Podľa definície je odkaz alias premennej a je inicializovaný počas samotného vytvárania. Nie je teda šanca, že budeme mať referenciu neplatnosti a neskôr jej priradiť premennú s konkrétnym dátovým typom. Naproti tomu môžeme mať neplatné ukazovatele.
Kvôli týmto obmedzeniam diskutovaným vyššie nie je možné odkazy v C ++ použiť s dátovými štruktúrami, ako je napríklad prepojený zoznam. Upozorňujeme, že v prostredí Java nemáme všetky tieto obmedzenia alebo obmedzenia na referencie.
Odovzdávanie odkazov na funkcie
V našich predchádzajúcich tutoriáloch o funkciách sme už diskutovali o technike parametrov „pass by reference“ a videli sme zámenu príkladu dvoch čísel pomocou tejto techniky. Vysvetlenie tejto techniky v tejto časti vynecháme a ako príklad uvádzame funkciu výmeny iba raz.
Ale tentoraz namiesto zámeny čísel ideme zameniť dva reťazce.
#include #include using namespace std; void swap(char * &str1, char * &str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = 'references'; char *str2 = 'pointers'; cout<<'str1 = '< Výkon:
str1 = odkazy str2 = ukazovatele
Po výmene….
str1 = ukazovatele str2 = referencie
Takže v tomto programe odovzdávame reťazce (char *) funkcii swap. Formálnymi parametrami sú dva odkazy na premennú typu char *. Poznamenávame, že pri zámene dvoch hodnôt sa ich modifikácia prejaví vo volajúcej funkcii, pretože pre parametre používame referencie / aliasy.
Vrátenie referencií
Rovnako ako vracanie ukazovateľov z funkcií, aj my môžeme vracať odkazy z funkcií. Vracajúce odkazy z funkcie tiež vrátia implicitný ukazovateľ na návratovú hodnotu. Z tohto dôvodu je možné na ľavej strane priradenia použiť funkciu vrátenia referencie.
Uveďme príklad vrátenia referencie z funkcie.
#include using namespace std; int myarray() = {1, 0, 2, 3, 5}; int& setValues( int i ) //returns reference to the array { return myarray(i); } int main () { cout << 'myarray before change' << endl; for ( int i = 0; i < 5; i++ ) { cout << 'myarray(' << i << ') = '; cout << myarray(i) << endl; } setValues(1) = 1; setValues(3) = 8; cout << 'Value after change' << endl; for (int i = 0; i < 5; i++ ) { cout<< 'myarray(' << i << ') = '; cout << myarray(i) << endl; } return 0; }
Výkon:
myarray pred zmenou
myarray (0) = 1
myarray (1) = 0
myarray (2) = 2
myarray (3) = 3
myarray (4) = 5
Hodnota po zmene
myarray (0) = 1
myarray (1) = 1
myarray (2) = 2
myarray (3) = 8
myarray (4) = 5
Screenshot z toho istého je uvedený nižšie:

Ako je vidieť vo vyššie uvedenom kóde, definujeme funkciu setValues, ktorá vráti referenciu a parameter, ktorý je celé číslo. Vo vnútri funkcie vrátime odkaz na pole na pozíciu I v C ++.
V hlavnej funkcii vytlačíme hodnoty poľa. Potom pomocou funkcie setValues zmeníme hodnoty dvoch prvkov v poli. Opäť vytlačíme hodnotu poľa.
Jedna vec, ktorú si musíme všimnúť pri odkazoch, je, že môžeme mať funkciu, ktorá vráti odkaz, iba keď sú dáta statické alebo globálne. Vrátenie odkazu na lokálnu premennú v C ++ je nezákonné.
Záver
Čitatelia by si mali uvedomiť, že odkazy sa používajú hlavne na prenos parametrov do funkcií.
V nasledujúcich tutoriáloch sa budeme venovať funkciám / výrazom lambda v C ++ predtým, ako prejdeme na objektovo orientované programovanie v C ++.
=> Vyskúšajte tu najlepšie výukové programy pre C ++.
Odporúčané čítanie
- Najlepšia výučbová séria C # ZDARMA: Sprievodca C # pre začiatočníkov
- Ukazovatele a operácie ukazovateľov v C ++
- Testovanie záťaže s výukovými programami HP LoadRunner
- Premenné v C ++
- Objektovo orientované programovanie v C ++
- Výukový program pre Unix Pipes: Rúry v programovaní v Unixe
- Funkcie knižnice v C ++
- 70+ NAJLEPŠÍCH tutoriálov pre C ++ Naučte sa programovanie v C ++ ZADARMO