3-Amaliy mashg’ulot: Nomlar fazosi
Download 337.29 Kb. Pdf ko'rish
|
nomalar fazosi
3-Amaliy mashg’ulot: 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 musta-qil ravishda aniqlangan bo‘lsa, bir xil nomlarni ishlatish bilan bog‘liq muammolar yuzaga kelish ehtimoli katta bo‘ladi. Nomlar fazosi tushunchasini kiritilishi mazkur muammoni ma’lum bir ma’noda hal qilishga yordam beradi. Agar programmada yangi identi-fikatorni aniqlash kerak bo‘lsa va xuddi shu nomni boshqa modul-larda 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: namespace { // e’lonlar } Nomlar fazosi ichida e’lon qilingan identifikatorlar faqat ko‘rinish sohasida bo‘ladi va yuzaga kelishi mumkin bo‘lgan kelishmovchiliklarning oldi olinadi. 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 amali-dan foydalanish mumkin: Shaxsiy_nomlar::x=5; Agar programma matnida konkret nomlar fazosiga nisbatan ko‘p murojaat qilinadigan bo‘lsa using 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 kerak-ligini bildiradi: x=0; y=z=10; Mening_functsiyam(’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 foydala-niladi. 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 standart nomlar fazosi ko‘rinish sohasini berkitadi va undagi nomga muro-jaat 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 Urta {...
namespace Ichki {int Ichki_n;} }
} Ichki_n o‘zgaruvchisiga murojaat quyidagi ko‘rinishda bo‘ladi: Yuqori::Urta::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 holat-ning ko‘rinishiga misol: namespace Nomlar_fazosi { char c; int I; void Functsiya(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 elementlariga 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 ishla-tish mumkin bo‘ladi. Masalan, nomlar fazosi nomi uzun bo‘lganda unga qisqa nom bilan murojaat qilish: namespace Juda_uzun_nomli_fazo { float y; } Juda_uzun_nomli_fazo::y=0; namespace Qisqa_nom=Juda_uzun_nomli_fazo; Qisqa_nom::y=13.2; Download 337.29 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling