Tamoyilaridan foydalanib, noma’lum nomlar fazosini tashkil qilish ko‘nikmalarini shakllantirish



Download 25,95 Kb.
bet3/4
Sana19.03.2022
Hajmi25,95 Kb.
#501470
1   2   3   4
Bog'liq
1-laboratoriya

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 25,95 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish