32 / 90

C++ References

C++ havolalari (References)

C++ da biz oʻzgaruvchiga taxallus yaratish uchun havoladan foydalanamiz. O'zgaruvchiga kirish yoki o'zgartirish uchun mos yozuvlar o'zgaruvchisidan foydalanishimiz mumkin.

C++ havolasini yarating

Malumot yaratish uchun biz ampersand belgisidan foydalanamiz. Masalan,

example.cpp
string& ref_city = city;

Bu yerga,

-string - o'zgaruvchining ma'lumotlar turi -& - biz mos yozuvlar yaratayotganimizni bildiradi

  • ref_city - mos yozuvlar o'zgaruvchisining nomi
  • shahar - mos yozuvlar yaratilgan o'zgaruvchi

Misol: C++ havolasi

example.cpp
#include <iostream>

using namespace std;

int main() {

    string city = "Paris";

    // o'zgaruvchiga havola yaratish
    string& ref_city = city;
    
    // o'zgaruvchini ko'rsatish
    cout << "Variable Value: " << city << endl;
    cout << "Reference Value: " << ref_city << endl;

    return 0;
}

Chiqish

kod
Variable Value: Paris
Reference Value: Paris

Yuqoridagi misolda biz city o'zgaruvchisining qiymatini ko'rsatish uchun ref_city mos yozuvlar o'zgaruvchisidan foydalanganmiz.

O'zgaruvchilarni havolalar yordamida o'zgartirish

Biz o'zgaruvchini mos yozuvlar o'zgaruvchisiga oddiygina yangi qiymat belgilash orqali o'zgartirishimiz mumkin. Masalan,

example.cpp
#include <iostream>

using namespace std;

int main() {

    string city = "Paris";

    // o'zgaruvchiga havola yaratish
    string& ref_city = city;
    
    // o'zgaruvchini ko'rsatish
    cout << "Variable Value = " << city << endl;
    cout << "Reference Value = " << ref_city << endl;

    // mos yozuvlar yordamida o'zgaruvchini o'zgartiring
    ref_city = "New York";

    // o'zgaruvchini ko'rsatish
    cout << endl << "After Modification: " << endl;
    cout  << "Variable Value = " << city << endl;
    cout << "Reference Value = " << ref_city << endl;

    return 0;
}

Chiqish

kod
Variable Value: Paris
Reference Value: Paris

After Modification:
Variable Value: = New York
Reference Value: New York

Muhim nuqtalar

  1. & belgisini joylashtirish

Ma'lumotnoma yaratishda biz & belgisini ma'lumotlar turi yoki o'zgaruvchi bilan joylashtirishimiz mumkin. Biroq, standart amaliyot ma'lumotlar turi bilan birga belgidan foydalanishdir. Masalan,

example.cpp
// o'zgaruvchi yarating
string city = "Paris";

// amal qiladi, lekin standart amaliyot emas
string &ref_city = city;

// haqiqiy va standart amaliyot
sring& ref_city = city;
  1. Adabiyotlarni ishga tushirish

Deklaratsiya paytida biz havolalarni ishga tushirishimiz kerak.

example.cpp
// o'zgaruvchi yarating
string city = "Paris";

// noto'g'ri kod [ma'lumotnoma ishga tushirilmagan]
string& ref_city;
ref_city = city;

// to'g'ri kod
string& ref_city = city;
  1. Yangi o'zgaruvchi bilan havola

O'zgaruvchiga havola yaratganimizdan so'ng, uni boshqa o'zgaruvchiga murojaat qilib o'zgartirib bo'lmaydi. Masalan,

example.cpp
#include <iostream>

using namespace std;

int main() {

    string city1 = "Paris";

    // o'zgaruvchiga havola yaratish
    string& ref_city = city1;
    
    // o'zgaruvchini ko'rsatish
    cout << "city1 = " << city1 << endl;
    cout << "ref_city = " << ref_city << endl;
    
    string city2 = "New York";
    
    // city2 ga murojaat qilish uchun ref_city mos yozuvlar o'zgaruvchisini o'zgartirishga harakat qilmoqda
    // lekin u city2 qiymatini city1 o'zgaruvchisiga belgilaydi
    ref_city = city2;

    // o'zgaruvchilarni ko'rsatish
    cout << endl << "city1 = " << city1 << endl;
    cout << "city2 = " << city2 << endl;
    cout << "ref_city = " << ref_city << endl;

    return 0;
}

Chiqish

kod
city1 = Paris
ref_city = Paris

city1 = New York
city2 = New York
ref_city = New York

Bu yerda, my_city = city2; qatoridagi city2 o‘zgaruvchisiga murojaat qilish uchun ref_city mos yozuvlar o‘zgaruvchisini o‘zgartirishga harakat qilganimizda, my_city mos yozuvlar o‘zgaruvchisi city2 ga murojaat qilish uchun o‘zgartirilmaydi.

Aksincha, city2 qiymati city1 oʻzgaruvchisiga tayinlangan, chunki ref_city mos yozuvlar oʻzgaruvchisi city1 oʻzgaruvchisiga ishora qiladi.

Tez-tez so'raladigan savollar C++ tilida havolalarning ikkita asosiy turi mavjud: lvalue havolalari rvalue havolasi lqiymatli havolalar lvalue o'zgaruvchi yoki ob'ekt bo'lib, u yaratilgan ifodadan tashqarida ham mavjud bo'lishi mumkin. Misol uchun, int a = 5; Bu erda biz ushbu ifodada a o'zgaruvchisini yaratdik, ammo u dasturning istalgan boshqa ifodasida ishlatilishi mumkin. Aslida, u e'lon qilingan doirada ishlatilishi mumkin. Nomidan ko'rinib turibdiki, lvalue havolalari qiymatlarga (o'zgaruvchilar yoki ob'ektlar) murojaat qilish uchun ishlatiladi. rvalue havolalari rvalue - bu yaratilgan iboradan tashqari mavjud bo'lmagan qiymat (masalan, literal, operator natijasi, funksiyaning qaytish qiymati va boshqalar). int a = 5; Bu erda 5 rvalue hisoblanadi. Unga boshqa ifodadan kirish mumkin emas. Eslatma: Biz ushbu maqolada foydalangan barcha havolalar lvalue havolalaridir. rvalue havolalari odatda ko'chirish semantikasida qo'llaniladi, bu esa ushbu qo'llanma doirasidan tashqarida. 1. Malumot o'zgaruvchining taxallusidir, ammo ko'rsatkich o'zgaruvchining xotira manzilini saqlaydigan boshqa o'zgaruvchidir. Misol uchun, cout << "s = " << s << endl; string s = "Paris"; string* pointer_to_s = &s; // prints the memory address of s cout << "pointer_to_s = " << pointer_to_s << endl; string& ref_s = s; // prints the string s cout << "ref_s = " << ref_s << endl; 2. Ko'rsatkich bilan ko'rsatilgan qiymatga kirish uchun biz * yo'qotish operatoridan foydalanamiz. Biroq, biz hech qanday operatorsiz ma'lumotnomadan to'g'ridan-to'g'ri foydalanishimiz mumkin. // pointer cout yordamida o'zgaruvchining qiymatini chop eting << "*pointer_to_s = " << *pointer_to_s << endl; // mos yozuvlar yordamida o'zgaruvchining qiymatini chop etish cout << "ref_s = " << ref_s << endl; 3. Ko‘rsatkichni boshqa o‘zgaruvchiga ishora qilish uchun o‘zgartirishimiz mumkin. Misol uchun, // city1 va city2 o'zgaruvchisini yaratish city1 = "Nyu-York"; string city2 = "Las-Vegas"; // city1 stringiga koʻrsatgich yaratish* point_city = &city1; // point_city cout tomonidan ko'rsatilgan qiymatni chop eting << "*point_city = " << *point_city << endl; // ko'rsatgichni city2 nuqtasiga o'zgartiring point_city = &city2; cout << "*point_city = " << *point_city << endl; Biroq, biz boshqa o'zgaruvchiga murojaat qilish uchun havolani o'zgartira olmaymiz.

Shuningdek o'qing: