C ++ dilində istinadlar

Referans dəyişən C ++ proqramlaşdırma dilində sinonimi ilə müqayisə edilə bilər. Yəni bir istinad dəyişəninin mövcud olan obyekt üçün sadəcə başqa bir ad olması deməkdir. İstinadlar göstəricilərlə səhv edilə bilər. Düzgün deyil, çünki istinadlar göstəricilərdən daha az güclüdür. Ancaq istinadlar göstəricilərdən daha təhlükəsizdir. C ++ istinadları və göstəriciləri arasında bəzi vacib fərqlər var:

Göstəricilər və istinadlar arasındakı fərq

  1. İstinadlar elan edildikdən sonra başlanğıc edilməlidir. Beləliklə, bir istinad NULL ola bilməz
  2. Bir istinad elan edildikdən və işə salındıqdan sonra başqa bir obyektə istinad etmək üçün istinad dəyişkənliyi etmək imkanı yoxdur.
  3. Göstəricilər heç bir yerə (NULL) işarə edə bilər, lakin istinad həmişə hər hansı bir obyektə aiddir.
  4. İstinadın ünvanını göstəricilərlə edə bildiyimiz üçün götürə bilmərik.
  5. İstiqamət hesabını göstəricilərlə edə bildiyimiz kimi edə bilməzsiniz.

İstinadlar sintaksis

Bəyannamə sintaksisidir:

type& Name = referencedObject;

hara növü hər hansı bir məlumat növüdür və ad istinad dəyişəninin identifikatorudur. Bir istinad dəyişkənliyini elan etdikdən sonra onu işə salmalısınız. Referans dəyişəninin yaradılması və istifadəsi nümunələri:
int a = 10; //integer variable is created
int& referenceToA = a;//a reference to variable 'a' is created
cout << "Value of a is " << a << endl;
cout << "Value referenced by \"referenceToA\" " << referenceToA << endl;

Çıxış:
A-nın dəyəri 10-dur
“ReferenceToA” istinad etdiyi dəyər 10

Xətt:

int& referenceToA = a;

kimi oxumaq olar: “referenceToA dəyişən a dəyişəninə tam bir istinaddır”.

İndi “a” və “referenceToA” identifikatorları eyni yaddaş yerinin identifikatorlarıdır. Bu, hər iki identifikatorun istifadəsində heç bir fərq olmadığını göstərir. Referansdan istifadə edərək dəyişənin dəyişdirilməsinə bir nümunə:

//decrease the value referenced by referenceToA
referenceToA = 2;
cout << "Value of a is " << a << endl;

Bu kodun nəticəsi:

A-nın dəyəri 2-dur

Referans dəyişən bir növ dəyişəndir. Buna görə dəyişənin əhatə dairəsi, dəyişdiricilər növləri və saxlama sinifləri ilə eyni qaydalar istinad dəyişəninə tətbiq olunur.

Funksiyaya istinad

Funksiyalara da istinadlar yarada bilərsiniz. Məsələn, tam ədədi qaytaran və ikiqat parametr kimi qəbul edən bir funksiyanız var:

int foo(double i)
{
	return 2;
}

Bir funksiyaya istinad yaratmaq üçün aşağıdakı sintaksisdən istifadə etməlisiniz:
type (&identifier) (parameter list) = referenced function;

Tip funksiyanın qaytarma növüdürsə,

identifikatoru - istinadın adıdır
parametr siyahısı - istinad olunan funksiyanın parametr siyahısı.

Fo funksiyasına istinad aşağıdakı şəkildə müəyyən edilir:

int(&referenceToFunction)(double) = foo;

İndi bir istinad istifadə edərək foo funksiyasına zəng etmək imkanı var:
referenceToFunction(3.0);

Bir funksiyanın parametri kimi istinad

Bir funksiyanın parametri olaraq bir istinaddan istifadə edə bilərsiniz. Referansların funksiyanın parametrləri kimi istifadə edilməsi funksiyanın parametrləri kimi göstəricilərin istifadəsinə bənzəyir. Ancaq bəzən göstəricilərlə istinadlar arasındakı fərqə görə göstəriciləri istifadə etməkdən daha təhlükəsizdir. Parametr olaraq istinaddan istifadə edən bir funksiyanın nümunəsinə nəzər yetirin:

void opposite(int& a)
{
	//change a to oposite
	a *= (-1);
}

Bu funksiyanın parametri bir istinaddır: int & a

Bu funksiyanı dəyişən adlandırırıqsa; dəyişənin dəyəri funksiyanın daxilində mənfi olaraq dəyişdiriləcəkdir:

int k = 7;
cout << "k before function call " << k << endl;
opposite(k);
cout << "k after function call " << k << endl;

K-nin dəyəri dəyişdiriləcək, çünki istinad funksiyasına ötürülür:

k funksiya çağırışından əvvəl 7
k -7 funksiyasından sonra

Bir qayıt növü kimi istinad

Qaytarma növü kimi istinad funksiyanın parametrlərindən bir dəyər qaytarmaq və ya qlobal dəyişən dəyərini qaytarmaq lazım olduqda tez-tez istifadə olunur. Məsələn, aşağıda göstərildiyi kimi qlobal dəyişən kimi elan edilmiş bir sıra var:

int arr[] = { 2, 6, 34, 2, 0, -4, 2 };

Dizinin indeksə uyğun elementini qaytaracaq bir funksiya yarada bilərik. Bir istinaddan funksiyanın qayıtma növü kimi istifadə etmək istəyirsinizsə, funksiyanın qaytarma növünü istinad kimi göstərməlisiniz:
int& getElement(int index)
{
	return arr[index];
}

Bu funksiya “indeks” indeksli elementə istinadı qaytaracaqdır

Bu, istinad qaytarma növü ilə bir funksiyanı çağırma nümunəsidir:

cout << "arr[3] = " << arr[3] << endl;
int& ref =  getElement(3);
ref = 0;
cout << "arr[3] = " << arr[3] << endl;

Ref'ü dəyişdirdikdən sonra elementi massivdə 3 indeksi ilə dəyişdirəcəksiniz:

arr [3] = 2
arr [3] = 0

Funksiyanın qaytarma növünün bir istinad olduğu üçün funksiya çağırışı sol dəyər olaraq istifadə edilə bilər və əvvəlki əməliyyat aşağıdakı şəkildə edilə bilər:

cout << "arr[3] = " << arr[3] << endl;
getElement(3) = 0;
cout << "arr[3] = " << arr[3] << endl;

 

Translate »