Yangi nomlar fazosi yaratish




Download 383,42 Kb.
Pdf ko'rish
bet4/7
Sana20.05.2024
Hajmi383,42 Kb.
#246690
1   2   3   4   5   6   7
Bog'liq
Muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari u

1.3. Yangi nomlar fazosi yaratish. 
Nomlar fazosi haqida qisqacha ma’lumotga ega bo‘lsangiz kerak.Endi bu 
tushunchani batafsilroq ko‘rib chiqamiz va foydalanuvchining nomlar fazosi qanday 
yaratilishini ko‘rib chiqamiz.Namespaces tushunchasi C++dasturlash tilida nisbatan 
yaqinda paydo bo‘lgan tushunchalardan biridir. Ular nomlarning o‘zaro bir xilligini 
oldini olish(kolliziyasaqlanish) uchun identifikatorlarning nomlarini lokalizatsiya 
qilish uchun mo‘ljallangan.
C++dasturlash muhitida,o‘zgaruvchan nomlari aql bovar qilmaydigan bir qator
operatorlari, funksiyalari, metodlari va sinflar mavjud.Nomlar fazosi tushunchasi 
kiritilishidan oldin, bu nomlarning barchasi bir xil global nomlar bo‘lib, ko‘plab 
nizolarni (xatoliklarni, o‘zaro bir xilliklarni)keltirib chiqargan. Agar dasturda dasturchi 
o‘zining toupper()funksiyasini yaratgan bo‘lsa, masalan, agar, u(uning parametrlari 
ro‘yxatiga qarab) standart kutubxona toupper(),funksiyasini almashtirish mumkin. 
Ammo,ikkala funuksiyalarning nomlari bir xil global namespaceda saqlangan 
bo‘ladi.Bir xil dasturlarni turli ishlab chiqaruvchilarning funksiyalari va 
sinflar,kutubxonalar foydalanganda nomlar bir xil bo‘lgan funksiyalar dastur 
bajarilishida ziddiyatlarga duch keladi. 
Bunday holda,bir kutubxonada aniqlangan nomlar boshqa kutubxonada 
aniqlangan nomlar bilan to‘qnashishi mumkin.Barcha muammolar nomlar fazosi 
tushunchasi va namespace kalit so‘z tomonidan halqilindi.Bu kalit so‘z yangi nomlar 
fazosi eʻlon qilish orqali barcha funksiya,sinf va kutubxonalarni mahalliylashtirish 
imkonini beradi.Bu nomlar fazosi turli kontekstlarda bir xil nomdagi funksiya va 
sinflar ziddiyatga olib kelmasdan ishlatish imkonini beradi. std standart kutubxona (std 
-Standart Library) juda ko‘p foydalanilgan bo‘lishi mumkin.Tilning dastlabki 
variantlarida C++ kutubxonasi global nomlar fazosida belgilangan.Sezilarli nomlar 
ziddiyatlari ehtimolini kamaytirish uchun std namespace nomlar fazosi yaratilgan. 
Bundan tashqari,ziddiyatlarni oldini olish uchun nomlar fazosi ko‘lamini 
mahalliylashtirish uchun dasturda o‘z nomfazongizni yaratishingiz mumkin.Bu 
shaxsiy sinf yoki funksiya kutubxonalar yaratishda, ayniqsa,muhim ahamiyatga 
ega.Namespace kalit so‘zi nomlar fazosida sohalarni qo‘shib global namespacedan 
ajratish imkonini beradi. Aslida,bir nomlar fazosi doirasi belgilaydi. Namespace kalit 
so‘zidan foydalanishning asosiy shakli quyida ko‘rsatilgan: 


namespace Space{ 
//.... 

Misol:Nomlar fazosini yaratish va foydalanish. 
#include "stdafx.h" 
#include  
using namespace std; 
// birinchi nomlar fazosi 
namespace NS1{ 
class demo{ 
int i; 
public: 
demo(int x) { i=x; } 
void set(int x) { i=x; } 
int get() { return i; } 
}; 
char str[] = "Nomlar fazolarini oʻrnatish\n"; 
int counter; 

// ikkinchi nomlar fazosi 
namespace NS2 { int x, u; } 
int main(){ 
NS1::demo ob(10); 
cout <<" ob = " << ob.get() << endl; 
ob.set(99); 
cout << "Endi ob = "<< ob.get() << endl; 
using NS1::str; cout << str; 
using namespace NS1; 
for(counter = 1; counter<=10; counter++) 
cout << counter << ends; 
cout << endl; 
NS2::x = 10; NS2::u = 20; 
cout << "oʻzgaruvchilar x, y = "<< NS2::x<<", " 
<< NS2::u<< endl; 
using namespace NS2; 
demo x_ob(x), y_ob(u); 
cout << "x_ob, y_ob ob’ektlarning qiymati: 
"<< x_ob.get(); cout<< " " << y_ob.get() << endl; 
system("pause"); 


return 0; 

Dastur natijasi: 
ob = 10 
Endi ob = 99 
Nomlar fazolarini oʻrnatish 
1 2 3 4 5 6 7 8 9 10 
oʻzgaruvchilar x, y = 10, 20 
x_ob, y_ob ob’ektlarning qiymati: 10 20 
Dasturda bir muhim nuqta ko‘rsatilgan: 
bir nechta nomlarn ibirgalikda ishlatganda, 
bir nomni boshqasi almashtirmaydi. 
Hozirgi fragmentda baʻzi nomlarni kiritganingizda, 
uning nomlari o‘sha paytda boshqa nomdagi nomlarning o‘zida bo‘lishidan qatʻi 
nazar, bu fragmentda qo‘shiladi. Shunday qilib,dastur bajarilayotgan vaqtda, std, NS1 
va NS2namespaces global namespace bo‘lib qo‘shildi.Yuqorida aytib 
o‘tilganidek,fayllar orasida yoki bitta fayl ichida nomlar fazosini ajratish 
mumkin,keyin esa bu nomlar fazosining a’zolarini mazmunan 
birlashtiriladi.Birgalikda nomlar fazosini birlashtirish misolini ko‘rib chiqamiz. 
Namespace larni birlashtirish. 
#include "stdafx.h" 
#include  
using namespace std; 
namespace Demo { 
int a; // Demo fazoda a oʻzgaruvchi 

int x; // Global fazoda x oʻzgaruvchi 
namespace Demo { 
int b; // Demo fazoda b oʻzgaruvchi 

using namespace Demo; 
int main(){ 
a = b = x = 101; 
cout << a << " " << a << " " << x << endl; 
system("pause"); 
return 0; 

Dastur natijasi: 
101 101 101 



Download 383,42 Kb.
1   2   3   4   5   6   7




Download 383,42 Kb.
Pdf ko'rish