references c
Cunoașteți modalitățile de declarare și utilizare a referințelor în C ++.
Referința este un concept major în limbajul de programare C ++. Deși nu este la fel de puternic ca indicii, totuși ne permite să-l folosim pentru a scrie programe eficiente. Utilizarea majoră a variabilei de referință este transmiterea parametrilor către funcții.
Populară tehnică de trecere a parametrilor „treceți prin referință” folosește referințe. În acest tutorial, vom vedea ce este o referință și cum să o declarăm și să o folosim. De asemenea, vom discuta diferențele dintre indicatori și referințe, precum și trecerea și returnarea unei referințe la / de la funcții.
=> Consultați aici pentru a explora lista completă de tutoriale C ++.
Ce veți învăța:
- Ce este o referință?
- Declararea variabilelor de referință
- Referință V Pointers
- Trecerea referințelor la funcții
- Revenirea referințelor
- Concluzie
- Lectură recomandată
Ce este o referință?
Referința este un alias sau un alt nume pentru o variabilă. Având în vedere o variabilă cu un identificator, putem furniza un alt identificator acestei variabile, astfel încât să ne putem referi la această variabilă fie cu numele său original, fie cu un alt nume. Acest „alt nume” este ceea ce se numește Referință.
Să considerăm că avem o variabilă „i” cu valoarea 17. Dacă j este o referință, atunci reprezentarea în memorie a variabilei i și a referinței j este prezentată mai jos.
După cum se arată în figura de mai sus, o variabilă și este alias, adică punctul de referință la aceeași valoare.
Declararea variabilelor de referință
O referință poate fi declarată folosind operatorul „&”.
Declarația de referință este prezentată mai jos.
int a = 10; int& refvar = a;
Deci, în codul de mai sus, am declarat o variabilă întreagă cu valoarea 10. Apoi declarăm o altă variabilă refvar și îi atribuim o variabilă. Rețineți că, în timp ce declarăm refvar, am folosit & operator chiar înainte de numele variabilei. Aceasta indică faptul că refvar este o referință la o variabilă deja existentă.
Ne putem referi la variabila „a” fie folosind numele variabilei a, fie folosind numele de referință „refvar”.
care este cheia de securitate de pe router
Mai jos este un exemplu simplu de referințe:
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< Ieșire:
Vârstă: 22 de ani
Numar de ani: 22
Salariu: 10000
Salarii: 10000
În codul de mai sus, avem o vârstă variabilă întreagă. În continuare, declarăm o variabilă numerică de referință numYears la variabila vârstă. Avem un alt salariu variabil de tip dublu. În continuare, declarăm o dublă salariu variabil de referință la salariul variabil.
Apoi, imprimăm variabilele, prima vârstă apoi referința sa este urmată de salariu și referința sa. Dacă verificăm rezultatul programului, înțelegem că variabila și referința la aceasta indică aceeași valoare și, prin urmare, Vârsta și numărul de ani, precum și salariul și salariile, au aceleași valori.
Referință V Pointers
Comparativ cu indicatoarele, referințele sunt mai sigure și mai ușor de utilizat.
Vom discuta câteva diferențe între indicii și referințe:
- Spre deosebire de indicatori, referințele nu pot avea o valoare nulă. Este obligatoriu ca referințele să aibă o valoare atribuită.
- Referințele sunt inițializate în momentul în care sunt create. Spre deosebire de aceasta, indicii pot fi inițializați în orice moment și nu neapărat în timpul declarației.
- Pointerii pot fi realocați la valorile ușoare. Dar cu referințe, nu putem face acest lucru. Odată ce o valoare a variabilei este atribuită, adică odată ce este creat un alias al unei variabile, nu putem atribui o altă variabilă acestei referințe.
- Nu avem referințe nule. Prin definiție, o referință este un alias pentru variabilă și este inițializată în timpul creației. Astfel, nu există nicio șansă ca să avem referință nulă și mai târziu să îi atribuim o variabilă cu un tip de date concret. În schimb, putem avea indicii nule.
Datorită acestor limitări discutate mai sus, referințele în C ++ nu pot fi utilizate cu structuri de date, cum ar fi o listă legată. Vă rugăm să rețineți că în Java, nu avem toate aceste restricții sau limitări referințelor.
Trecerea referințelor la funcții
În tutorialele noastre anterioare despre funcții, am discutat deja despre tehnica parametrilor „treceți prin referință” și am văzut schimbarea a două numere de exemplu folosind această tehnică. Ignorăm explicația acestei tehnici în această secțiune și prezentăm o funcție de schimb doar din nou, ca exemplu.
program de backup gratuit pentru Windows 7
Dar de data aceasta, în loc să schimbăm numerele, vom schimba două șiruri.
#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 = '< Ieșire:
str1 = referințe str2 = indicatori
După swap ...
str1 = pointeri str2 = referințe
Deci, în acest program, trecem șirurile (char *) la funcția swap. Parametrii formali sunt două referințe la o variabilă de tip char *. Observăm că atunci când sunt schimbate două valori, modificarea lor se reflectă în funcția de apelare, deoarece folosim referințe / aliasuri pentru parametri.
Revenirea referințelor
La fel ca întoarcerea pointerilor din funcții, putem returna și referințe din funcții. Returnarea referințelor dintr-o funcție returnează, de asemenea, un indicator implicit la valoarea returnată. Din acest motiv, o funcție care returnează o referință poate fi utilizată în partea stângă a atribuirii.
Să ne oferim un exemplu de returnare a unei referințe dintr-o funcție.
#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; }
Ieșire:
greseala înainte de schimbare
myarray (0) = 1
myarray (1) = 0
myarray (2) = 2
myarray (3) = 3
myarray (4) = 5
Valoare după schimbare
myarray (0) = 1
myarray (1) = 1
myarray (2) = 2
myarray (3) = 8
myarray (4) = 5
Captura de ecran pentru același lucru este prezentată mai jos:

După cum se vede în codul de mai sus, definim o funcție setValues care returnează o referință și un parametru care este un număr întreg. În interiorul funcției, returnăm doar referința matricei la poziția I din C ++.
În funcția principală, imprimăm valorile matricei. Apoi, folosind funcția setValues, schimbăm valorile a două elemente din matrice. Din nou imprimăm valoarea matricei.
Un lucru pe care trebuie să-l menționăm cu referințe este că putem avea o funcție care returnează o referință numai atunci când datele sunt fie statice, fie globale. Este ilegal să returnați o referință la o variabilă locală în C ++.
Concluzie
Cititorii ar trebui să rețină că utilizarea principală a referințelor este pentru a transmite parametrii funcțiilor.
În tutorialele viitoare, vom acoperi funcțiile / expresiile lambda în C ++ înainte de a trece la programarea orientată obiect în C ++.
=> Consultați aici cele mai bune tutoriale de formare C ++.
Lectură recomandată
- Cea mai bună serie de tutoriale GRATUITE C #: Ghidul final C # pentru începători
- Pointeri și operații de pointer în C ++
- Testarea încărcării cu tutoriale HP LoadRunner
- Variabile în C ++
- Programare orientată pe obiecte în C ++
- Tutorial Unix Pipes: Pipe în programarea Unix
- Funcții de bibliotecă în C ++
- 70+ BEST Tutoriale C ++ Pentru a învăța programarea C ++ GRATUIT