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.
Malumot yaratish uchun biz ampersand belgisidan foydalanamiz. Masalan,
string& ref_city = city;
Bu yerga,
-string - o'zgaruvchining ma'lumotlar turi
-& - biz mos yozuvlar yaratayotganimizni bildiradi
#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
Variable Value: Paris
Reference Value: Paris
Yuqoridagi misolda biz city o'zgaruvchisining qiymatini ko'rsatish uchun ref_city mos yozuvlar o'zgaruvchisidan foydalanganmiz.
Biz o'zgaruvchini mos yozuvlar o'zgaruvchisiga oddiygina yangi qiymat belgilash orqali o'zgartirishimiz mumkin. Masalan,
#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
Variable Value: Paris
Reference Value: Paris
After Modification:
Variable Value: = New York
Reference Value: New York
& belgisini joylashtirishMa'lumotnoma yaratishda biz & belgisini ma'lumotlar turi yoki o'zgaruvchi bilan joylashtirishimiz mumkin. Biroq, standart amaliyot ma'lumotlar turi bilan birga belgidan foydalanishdir. Masalan,
// o'zgaruvchi yarating
string city = "Paris";
// amal qiladi, lekin standart amaliyot emas
string &ref_city = city;
// haqiqiy va standart amaliyot
sring& ref_city = city;
Deklaratsiya paytida biz havolalarni ishga tushirishimiz kerak.
// 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;
O'zgaruvchiga havola yaratganimizdan so'ng, uni boshqa o'zgaruvchiga murojaat qilib o'zgartirib bo'lmaydi. Masalan,
#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
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: