3-Amaliy mashg’ulot: Nomlar fazosi


Download 337.29 Kb.
Pdf ko'rish
Sana17.09.2020
Hajmi337.29 Kb.
#129961
Bog'liq
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); 

… 

void Nomlar_fazosi::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'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling