references c
Seznamte se se způsoby, jak deklarovat a používat odkazy v C ++.
Reference je hlavním konceptem v programovacím jazyce C ++. Ačkoli to není tak silné jako ukazatele, přesto nám to umožňuje používat jej k psaní efektivních programů. Hlavní použití referenční proměnné je při předávání parametrů funkcím.
Populární technika předávání parametrů „pass by reference“ využívá odkazy. V tomto tutoriálu uvidíme, co je to reference a jak ji deklarovat a použít. Budeme také diskutovat o rozdílech mezi ukazateli a odkazy a také o předávání a vracení odkazů na / z funkcí.
=> Prohlédněte si zde Úplný seznam výukových programů C ++.
Co se naučíte:
- Co je to reference?
- Deklarace referenčních proměnných
- Referenční Vs ukazatele
- Předávání odkazů na funkce
- Vrácení referencí
- Závěr
- Doporučené čtení
Co je to reference?
Odkaz je alias nebo jiný název proměnné. Vzhledem k proměnné s identifikátorem můžeme této proměnné poskytnout další identifikátor, abychom mohli na tuto proměnnou odkazovat buď jejím původním názvem, nebo jiným názvem. Toto „jiné jméno“ se nazývá reference.
Uvažujme, že máme proměnnou „i“ s hodnotou 17. Pokud j je reference, je níže zobrazeno paměťové znázornění proměnné i a reference j.
Jak je znázorněno na výše uvedeném obrázku, proměnná a její alias, tj. Referenční bod, na stejnou hodnotu.
Deklarace referenčních proměnných
Odkaz lze deklarovat pomocí operátoru „&“.
Prohlášení o odkazu je uvedeno níže.
int a = 10; int& refvar = a;
Ve výše uvedeném kódu jsme tedy deklarovali celočíselnou proměnnou s hodnotou 10. Potom deklarujeme jinou proměnnou refvar a přiřadíme jí proměnnou. Všimněte si, že při deklaraci refvar jsme použili operátor & těsně před názvem proměnné. To znamená, že refvar je odkaz na již existující proměnnou.
Na proměnnou „a“ můžeme odkazovat buď pomocí názvu proměnné a, nebo pomocí referenčního názvu „refvar“.
jak vytvořit testng xml soubor v zatmění
Níže je uveden jednoduchý příklad odkazů:
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< Výstup:
Věk: 22
Počet let: 22
Plat: 10 000
Mzdy: 10 000
Ve výše uvedeném kódu máme celočíselnou proměnnou age. Dále deklarujeme referenční celočíselnou proměnnou numYears k proměnné věku. Máme další variabilní plat typu double. Dále deklarujeme dvojitou referenční proměnnou mzdu s proměnnou mzdou.
Dále vytiskneme proměnné, nejprve věk, poté jeho reference, následuje plat a její reference. Pokud zkontrolujeme výstup programu, chápeme, že proměnná a odkaz na ni ukazují na stejnou hodnotu, a proto věk a počet roků, stejně jako plat a mzdy, mají stejné hodnoty.
Referenční Vs ukazatele
Ve srovnání s ukazateli jsou odkazy bezpečnější a jednodušší.
Budeme diskutovat o několika rozdílech mezi ukazateli a odkazy:
- Na rozdíl od ukazatelů nemohou mít odkazy nulovou hodnotu. U referencí je povinné mít přiřazenou hodnotu.
- Odkazy jsou inicializovány v okamžiku jejich vytvoření. Na rozdíl od toho lze ukazatele inicializovat kdykoli a ne nutně během deklarace.
- Ukazatele lze snadno přiřadit k hodnotám. Ale s odkazy to nemůžeme udělat. Jakmile je hodnota proměnné přiřazena, tj. Jakmile je vytvořen alias proměnné, nemůžeme této referenci přiřadit jinou proměnnou.
- Nemáme neplatné odkazy. Podle definice je odkaz alias proměnné a je inicializován během samotného vytváření. Není tedy šance, že budeme mít odkaz na prázdnotu a později k ní přiřadit proměnnou s konkrétním datovým typem. Naproti tomu můžeme mít ukazatele neplatnosti.
Kvůli těmto omezením diskutovaným výše nelze odkazy v C ++ použít s datovými strukturami, jako je propojený seznam. Vezměte prosím na vědomí, že v Javě nemáme všechna tato omezení nebo omezení referencí.
Předávání odkazů na funkce
V našich předchozích tutoriálech o funkcích jsme již diskutovali o parametrické technice „pass by reference“ a viděli jsme, že jsme pomocí této techniky vyměnili příklad dvou čísel. Vyskočení této techniky v této části přeskočíme a jako příklad představíme funkci swap ještě jednou.
Ale tentokrát namísto zaměnění čísel zaměníme dva řetězce.
#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ýstup:
str1 = odkazy str2 = ukazatele
Po výměně….
str1 = ukazatele str2 = reference
Takže v tomto programu předáváme řetězce (char *) funkci swap. Formální parametry jsou dva odkazy na proměnnou typu char *. Poznamenáváme, že když jsou zaměněny dvě hodnoty, jejich modifikace se projeví ve volající funkci, protože používáme reference / aliasy pro parametry.
Vrácení referencí
Stejně jako vrací ukazatele z funkcí, můžeme také vracet odkazy z funkcí. Vrácení odkazů z funkce také vrátí implicitní ukazatel na návratovou hodnotu. Z tohoto důvodu lze na levé straně přiřazení použít funkci vracející odkaz.
Uveďme příklad vrácení odkazu z funkce.
#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ýstup:
myarray před změnou
myarray (0) = 1
myarray (1) = 0
myarray (2) = 2
myarray (3) = 3
myarray (4) = 5
Hodnota po změně
myarray (0) = 1
myarray (1) = 1
myarray (2) = 2
myarray (3) = 8
myarray (4) = 5
jak otevřít soubory .json
Screenshot stejného obrázku je uveden níže:

Jak je vidět ve výše uvedeném kódu, definujeme funkci setValues, která vrací odkaz a parametr, který je celé číslo. Uvnitř funkce vrátíme odkaz na pole na pozici I v C ++.
V hlavní funkci vytiskneme hodnoty pole. Potom pomocí funkce setValues změníme hodnoty dvou prvků v poli. Opět vytiskneme hodnotu pole.
Jedna věc, kterou si musíme povšimnout u odkazů, je, že můžeme mít funkci, která vrací referenci, pouze když jsou data statická nebo globální. Je nelegální vrátit odkaz na místní proměnnou v C ++.
Závěr
Čtenáři by si měli uvědomit, že hlavní použití odkazů je pro předávání parametrů funkcím.
V nadcházejících výukových programech se budeme zabývat funkcemi / výrazy lambda v C ++, než přejdeme na objektově orientované programování v C ++.
=> Podívejte se na nejlepší výukové kurzy C ++ zde.
Doporučené čtení
- Nejlepší ZDARMA C # Tutorial Series: The Ultimate C # Guide For Beginners
- Ukazatele a operace ukazatele v C ++
- Testování zátěže s výukovými programy HP LoadRunner
- Proměnné v C ++
- Objektově orientované programování v C ++
- Výukový program pro Unix Pipes: Pipes v programování Unixu
- Funkce knihovny v C ++
- 70+ NEJLEPŠÍCH C ++ návodů, jak se naučit programování v C ++ ZDARMA