«Aniq fanlar» kafedrasi fanidan ma’ruzalar matni
volatile sinfi o‘zgaruvchilari
Download 1.15 Mb.
|
dasturlash fanidan maruzalar matni 2
- Bu sahifa navigatsiya:
- Nomlar fazosi
volatile sinfi o‘zgaruvchilari. Agar programmada o‘zgaruvchini birorta tashqi qurilma yoki boshqa programma bilan bog‘lash uchun ishlatish zarur bo‘ladigan bo‘lsa, u volatile modifikatori bilan e’lon qilinadi. Kompilyator bunday modifikatorli o‘zgaruvchini registrga joylashtirishga harakat qilmaydi. Bunday o‘zgaruvchilar e’loniga misol quyida keltirilgan:
volatile short port_1; volatile const int Adress=0x00A2; Misoldan ko‘rinib turibdiki, volatile modifikatorli o‘zgarmas ham e’lon qilinishi mumkin. Nomlar fazosi: Ma’lumki, programmaga qo‘shilgan sarlavha fayllarida e’lon qilingan identifikator va o‘zgarmaslar kompilyator tomonidan yagona global nomlar fazosiga kiritiladi. Agar programma ko‘p miqdordagi sarlavha fayllarni ishlatsa va undagi identifikatorlar (funksiya nomlari va o‘zgaruvchilar nomlari, sinflar nomlari va hakozalar) va o’zgarmaslar nomlari turli programma tuzuvchilar tomonidan mustaqil ravishda aniqlangan bo‘lsa, bir xil nomlarni ishlatish bilan bog‘liq muommolar yuzaga kelish ehtimoli katta bo‘ladi. Nomlar fazosi tushunchasining kiritilishi mazkur muammoni ma’lum bir ma’noda hal qilishga yordam beradi. Agar programmada yangi identifikatorni aniqlash kerak bo‘lsa va xuddi shu nomni boshqa modullarda yoki kutubxonalarda ishlatishi xavfi bo‘ladigan bo‘lsa, bu identifikatorlar uchun o’zining shaxsiy nomlar fazosini aniqlash mumkin. Bunga namespace kalit so‘zidan foydalanilgan holda erishiladi: { //e’lonlar } Nomlar fazosi ichida e’lon qilingan identifikatorlar faqat Misol tariqasida quyidagi nomlar fazosini yarataylik: namespace Shaxsiy_nomlar {int x,y,z; void Mening_funksiyam(char belgi); } Kompilyatorga konkret nomlar fazosidagi nomlarni ishlatish kerakligini ko‘rsatish uchun ko‘rinish sohasiga ruxsat berish amalidan foydalanish mumkin: Shaxsiy_nomlar::x=5; Agar programma matnida konkret nomlar fazosiga nisbatan ko‘p murojaat qilinadigan bo‘lsa uning namespace qurilmasini ishlatish orqali yozuvni soddalashtirish mumkin: using namespace Masalan,
using namespace Shaxsiy_nomlar; ko‘rsatmasi kompilyatorga, bundan keyin toki navbatdagi using uchramaguncha Shaxsiy_nomlar fazosidagi nomlar ishlatilishi kerakligini bildiradi: x=0; y=z=10; Mening_funksiyam(‘A’); Programma va unga qo‘shilgan sarlavha fayllari tomonidan aniqlanadigan nomlar fazosi std deb nomlanadi. Standart fazoga o‘tish kerak bo‘lsa using namespace std; ko‘rsatmasi beriladi. Agar birorta nomlar fazosidagi alohida bir nomga murojaat qilish zarur bo‘lsa, using qurilmasini boshqa shaklida foydalaniladi. Misol uchun using namespace std; using namespace Shaxsiy_nomlar::x; ko‘rsatmasi x identifikatorini Shaxsiy_nomlar fazosidan ishlatish kerakligini bildiradi. Shuni qayd etish kerakki, using namespace qurilmasi standard nomlar fazosi ko‘rinish sohasini berkitadi va undagi nomga murojaat qilish uchun ko‘rinish sohasiga ruxsat berish amalidan (std: foydalanish zarur bo‘ladi. Nomlar fazosi funksiya ichida e’lon qilinishi mumkin emas, lekin ular boshqa nomlar fazosi ichida e’lon qilinishi mumkin. Ichma-ich joylashgan nomlar fazosidagi identifikatorga murojaat qilish uchun uni qamrab olgan barcha nomlar fazosi nomlar ketma-ket ravishda ko’rsatilishi kerak. Misol uchun, quyidagi ko‘rinishda nomlar fazosi e’lon qilingan bo‘lsin: namespace yuqori
… namespace o’rta { … namespace ichki { int Ichki_n; } }
Ichki_n o’zgaruvchisiga murojaat quyidagi ko‘rinishda bo‘ladi: Yuqori : : O’rta : : Ichki : :Ichki_n=0 ; Nomlar fazosida funksiyani e’lon qilishda nomlar fazosida faqat funksiya prototipini e’lon qilish va funksiya tanasini boshqa joyda e’lon qilish ma’qul variant hisoblanadi. Bu holatning ko‘rinishiga misol: namespace Nomlar_fazosi { char c;
int I; void Funksiya(char Bayroq); } …
// funksiya tanasi } Umuman olganda, o‘z nomiga ega bo‘lmagan nomlar fazosini e’lon qilish mumkin. Bu holda namespace kalit so‘zidan keyin hech nima yozilmaydi. Misol uchun namespace { char c_nomsiz; int i_nomsiz; } ko’rinishidagi nomlar fazosi elemenlariga murojaat hech bir prefiks ishlatmasdan amalga oshiriladi. Nomsiz nomlar fazosi faqat o‘zi e’lon qilingan fayl chegarasida amal qiladi. C++ tili nomlar fazosining psevdonimlarini aniqlash imkonini beradi. Bu yo‘l orqali nomlar fazosini boshqa nom bilan ishlatish mumkin bo‘ladi. Masalan, nomlar fazosi nomi uzun bo‘lganda unga qisqa nom bilan murojaat qilish: namespace Juda_uzun_nomli_fazo { f1oat: y; } Juda_uzun_nomli_fazo::y=o; namespace Qisqa_nom= Juda_uzun_nomli_fazo; Qisqa_nom::y=13.2; Download 1.15 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling