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:
Do'stlaringiz bilan baham: |