1-ma’ruza. Noma'lum nomlarning noma'lum turlari va maydoni Ma’ruza rejasi



Yüklə 63,61 Kb.
səhifə8/9
tarix17.03.2023
ölçüsü63,61 Kb.
#88450
1   2   3   4   5   6   7   8   9
1-mavzu

namespace nomi {// e'lonlar}
namespace yo'riqnomasida aniqlangan har bir narsa ma'lum bir nom maydoni ichida joylashgan.
Quyida MyNameSpace nomini e'lon qilishning misoli keltirilgan:
namespace MyNameSpace { int i,k; void myfunc (intj) { cout <<ј; }
class myclass { public:
void seti (int x) { i = х; } int geti() { return i; }
Bu erda o'zgaruvchilar nomlari i va K, vazifalari myfunc (), va sinf myclass ko'rinishi sohasida, MyNameSpace nomlari ma'lum bir maydon.
Ism maydonida e'lon qilingan identifikatorlarga ushbu makon ichida to'g'ridan-to'g'ri murojaat qilish mumkin. Misol uchun, ko'rsatmalarda MyNameSpace nomi fazoda qaytish i o'zgaruvchilar i aniq ko'rsatilgan. Biroq, namespace kalit so'zi ba'zi bir ko'rinishlarni aniqlaganligi sababli, nom maydoni tashqarisidan ushbu makon ichida e'lon qilingan ob'ektlarga murojaat qilganda, ko'rish maydonini kengaytirish operatori ko'rsatilishi kerak. Misol uchun, qiymatini belgilash uchun 10 dasturning bu qismida o'zgaruvchilar i, qaysi MyNameSpace nomi oraliq kiritilgan emas, agar quyidagi ko'rsatmalarga foydalanish kerak:
MyNameSpace::i 10;
Va MyClass kabi ob'ektni MyNameSpace nomlarining maydoniga kiritilmagan dasturning bir qismida e'lon qilish uchun sizga bunday ko'rsatma kerak:
MyNameSpace::myclass ob;
Shunday qilib, a'zo nomidan oldin bu makondan tashqarida nom maydoni a'zosiga kirish uchun nom maydoni nomini ko'rish maydonini kengaytirish operatori bilan ko'rsatish kerak.
Tasavvur qilishingiz mumkinki, agar sizning dasturingizda nom maydoni a'zolariga murojaat qilish juda tez-tez sodir bo'ladigan bo'lsa, har safar nom maydoni nomini va ko'rinadigan kengaytma operatorini ko'rsatish zarurati tezda zerikib ketishi mumkin. Ushbu muammoni hal qilish uchun foydalanuvchi qo'llanmasi ishlab chiqildi. Ushbu yo'riqnomada ikkita asosiy shakl mavjud:
foydalanish namespace nomi; foydalanish
Birinchi shaklda nom parametri siz istagan nom maydoni nomini belgilaydi. Qo'llanmaning ushbu shaklini ishlatganda, ko'rsatilgan nom maydonida aniqlangan barcha a'zolar hozirgi nom maydonida mavjud bo'lib, ular bilan to'g'ridan-to'g'ri ishlashi mumkin, bu esa har safar kosmik nomini va ko'rish maydonini kengaytirish operatorini ko'rsatmasdan. Foydalanish ko'rsatmalar ikkinchi shakl yordamida qachon aniq faqat nomi maydoni a'zosi ko'rsatmalar ko'rsatilgan amalga oshiriladi. Misol uchun, biz yuqorida tasvirlangan MyNameSpace nom maydoni bor bo'lsin, keyin to'g'ri barcha quyida keltirilgan using ko'rsatmalar va tayinlash operatorlari:
using MyNameSpace::k; / / aniq faqat k o'zgaruvchilar amalga oshiriladi 10; / / ko'rsatmalar to'g'ri, o'zgaruvchilar aniq, chunki
foydalanish namespace MyNameSpace; H ko'rinadigan barcha a'zolari amalga oshiriladi
N kosmik MyNameSpace nomlari
10; / / ko'rsatmalar to'g'ri, chunki MyNameSpace nomlarining barcha a'zolari // joylari ko'rinadi
Xuddi shu nom bilan bir nechta nom maydonini e'lon qilish imkoniyati mavjud. Bu siz bir necha fayllar ichiga nom oraliq ajratish yoki hatto bitta fayl ichida nom oraliq ajratish imkonini beradi. Quyidagi misolni ko'rib chiqaylik:
namespace NS { inti;
namespace NS { int j};
Bu erda NS nomlari maydoni ikki qismga bo'linadi. Shunga qaramay, har bir qismning mazmuni hali ham bir xil nom maydonida — NS makonida qolmoqda.
Ism maydoni boshqa barcha ko'rinishlar doirasidan tashqarida e'lon qilinishi kerak, faqat bitta nom maydoni boshqasiga investitsiya qilinishi mumkin. Ya'ni, nomlarning ichki maydoni faqat boshqa nomlarda bo'lishi mumkin, lekin har qanday ko'rinishda emas. Bu shuni anglatadiki, nomlarning bo'sh joylarini e'lon qilish mumkin emas, masalan, funktsiya ichida.
Maxsus turdagi nomlar mavjud-Nomsiz nom maydoni (unnamed space). Nomsiz nom maydoni sizga ma'lum bir fayl ichida noyob identifikatorlarni yaratishga imkon beradi. Quyida Nomsiz nomlarning asosiy shakli ko'rsatilgan:
namespace {// e'lonlar}
Nomsiz nomlar joylari faqat bitta faylning ko'rinishi sohasida ma'lum bo'lgan noyob identifikatorlarni o'rnatish imkonini beradi. Shunday qilib, Nomsiz ism maydonini o'z ichiga olgan fayl ichida, bu makon a'zolariga hech qanday aniqlik kiritmasdan to'g'ridan-to'g'ri murojaat qilish mumkin. Lekin bu fayldan tashqarida bunday identifikatorlar noma'lum.
Kichik va o'rta dastur uchun nom joylaringizni yaratishingiz shart emas. Biroq, agar siz bir nechta foydalanish uchun mo'ljallangan funktsiyalar yoki sinflar kutubxonalarini yaratmoqchi bo'lsangiz yoki dasturlaringizni keng tolerantlik bilan kafolatlashni istasangiz, kodlaringizni ba'zi nomlar ichida joylashtirishni ko'rib chiqing.
Misollar
1. Quyidagi misolda namoyish nomlarining atributlari ko'rsatilgan.
// Namespace nomi # include < iostream > using namespace std;
// namespace nomlari birinchi oraliq aniqlash 6rstns { class demo (int i; public:
bu bizning bemorlarimiz va xodimlarimiz uchun katta sharaf.; }
o'tish: saytda harakatlanish,qidiruv;
/ l namespace secondNS nomlari ikkinchi oraliq aniqlash { int x, y;
int main()
// ko'rinish maydonini kengaytirish ob(10);
/ * Ob ob'ektini e'lon qilgandan so'ng, uning a'zo vazifalari nomlar maydonini aniqlashtirmasdan to'g'ridan-to'g'ri ishlatilishi mumkin
cout < < " ob ob'ekt qiymati teng:" // 6rstns foydalanish hozirgi ko'rinishi sohasida str mag'lubiyatga kiriting:: str; cout <;
// 6rstns nomlari butun oraliq kiriting / / f1rstns foydalanish hozirgi ko'rinishi sohasida; uchun (counter=l (); counter; counter—) hisoblash << counter < cout << endl;
// secondns secondns nomlari oraliq foydalanish:: x 10; secondNS:: y 20;
o'tish: saytda harakatlanish, qidiruv;
/l secondNS / l nomlarining barcha maydonini ikkinchi nomlar yordamida joriy ko'rish maydoniga kiriting; demo xo( x), uo (y);
cout Dasturni amalga oshirgandan so'ng, ekranda quyidagilar ko'rsatiladi:
Ob ob'ektining qiymati: 10 endi ob ob'ektining qiymati: 99
Ism joylarini tasvirlash
109 8 7 6 543 2 1
O'zgaruvchilar x, y teng: 10, 20
Xo, uo ob'ektlarining qiymatlari tengdir: 10, 20
Dastur bir muhim pozitsiyani tasvirlaydi: bir nechta nom joylarini almashish bilan bir makon boshqasini almashtirmaydi. Hozirgi ko'rinishdagi ma'lum bir nom maydonini kiritganingizda, uning nomlari o'sha vaqtda boshqa nomlar maydonlaridan nomlar mavjud bo'lishidan qat'i nazar, bu maydonga qo'shiladi. Shunday qilib, dastur tugallanadigan vaqtga kelib, std, firstNS va secondNS nomlari uchun joylar global nom maydoniga qo'shildi.
2. Yuqorida aytib o'tilganidek, nom maydoni fayllar orasidagi yoki bitta fayl ichida bo'linishi mumkin, keyin bu nom maydonining mazmuni birlashtiriladi. Ajratilgan nom maydonini birlashtirish misolini ko'rib chiqing.
/ l nomi oraliq birlashtirish # include foydalanish namespace std;
namespace Demo { int a; / l nomi fazoda o'zgaruvchilar a e'lon Demo int x; / / global nomi kosmosda o'zgaruvchilar x e'lon
namespace Demo { int B; / / kosmik nomi Demo int main o'zgaruvchan B e'lon()
foydalanish namespace Demo; a = b = x = 100; cout a "" b ' return 0;
Ushbu misolda ikkala o'zgaruvchi ham, a va B nomlari bir xil maydonda edi demo nom maydoni va x o'zgaruvchisi global nom maydonida edi.
Z. yuqorida aytib o'tilganidek, Standard C++ standarti std nomlarining o'z maydonida butun kutubxonani belgilaydi. Shuning uchun ushbu kitobning barcha dasturlarida quyidagi ko'rsatmalar mavjud:

Yüklə 63,61 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin