Tashqi e'lonlar
Ixtiyoriy funksiya dasturning barcha modullarida avtomatik ko'rinadi. Agar funksiya amal qilish sohasini u tavsiflangan fayl bilan chegaralash talab qilinsa static modigikatordan foydalaniladi.
Bir nechta modullarda o'zgaruvchi yoki konstantaga kirishni amalga oshirish uchun
bitta modulda global sifatida uni aniqlash;
uni boshqa modullarda extern modifikator yordamida tashqi deb e'lon qilish.
Boshqa usul – bu e'lonni sarlavha faylga joylashtirish va uni zarur modullarga kiritish.
Bitta va faqat bitta o'zgaruvchini barcha tavsiflari kelishtirilishi lozim.
one.cpp va two.cpp fayllarda ikkita global o'zgaruvchilarnimy_header.h sarlavha fayli yordamida tavsiflash misoli.
// my_header.h – tashqi e'lonlar
extern int a;
extern double b;
…
// ------------------------------
// one.cpp
#include "my_header.h"
int a;
…
// ------------------------------
// two.cpp
#include "my_header.h"
double b;
…
one.cpp va two.cpp fayllarda ikkita o'zgaruvchiga kirish mumkin.
Agar o'zgaruvchi static kabi tavsiflangan bo'lsa, uni amal qilish sohasi, u tavsiflagan fayl bilan chegaralanadi.
Tipni tavsiflashda bitta ta'rif qoidasiga tayanish lozim, ya'ni dasturda foydalanilgan tip roppa-rosa bir marta aniqlanishi lozim. Odatda bu sarlavha faylda bajariladi, keyin bu tipni foydalanuvchi modullarga ulanadi. Bu qoidaning buzilishi qiyin aniqlanadigan xatolarga olib keladi, chunki kompilyatorlar, odatda turli fayllarda bitta tipning ta'riflarini taqqoslash imkoniyatiga ega emas.
Nomlangan soha
Nomlangan soha e'lonlarni mantiqiy guruhlash va ularga kirishni chegaralash uchun xizmat qiladi. Oddiy qo'llanilishiga misol, bir kishi tomonidan yozilgan kodni ikkinchi tomonidan yozilgan koddan ajratish hisoblanadi. Yagona global ko'rinish sohasidan foydalanilganda alohida qismlardan dasturni shakllantirish mumkin bo'lganlarning ustma-ust tushishi va bahslashivu sababli juda murakkab. Nomlangan sohalardan foydalanish zarur bo'lmagan vositalarga kirishga to'sqinlik qiladi.
Nomlangan sohani e'lon qilish (uni yana nomlar fazosi deb ham ataladi)
namespace [ nom_sohasi ]{ /* E'lon */ }
formatga ega.
Nomlangan soha bir necha marta e'lon qilinishi mumkin, bunda keyingi e'lonlar oldingilarning kengaytmalari kabi qaraladi. Shunday qilib, nomlangan soha bitta fayl doirasida e'lon qilinishi va o'zgartirilishi mumkin.
Agar soha nomi berilgan bo'lsa, uni kompilyator har bir modul bo'yicha turlicha noyob identifikator yordamida mustaqil aniqlanadi. E'lonlarni bunday sohaga joylashtirish foydali, chunki kodning lokallik xossasini saqlaydi. Bir fayldan boshqa faylning nomlangan sohasi elementiga kirish mumkin emas.
Misol.
namespace demo{
int i = 1;
int k = 0;
void func1(int);
void func2(int) { /* … */}
}
namespace demo{ // Kengaytma
// int i = 2; Qo'shma ta'rif noto'g'ri
void func1(double); // Ortiqcha yuklanish
void func2(int); // To'g'ri (takroriy e'lon)
}
Nomlangan soha e'lon qilishda e'lonlar va ta'riflar qatnashishi mumkin. Unga nafaqat e'lonlarni balki ularni soha nomi va :: ko'rinish sohasiga kirish operatori yordamida aniqlanadi, masalan,
void demo::func1(int) { /* … */}
Bu interfeys va amalga oshirishni bo'lish uchun qo'llaniladi. Shunday usul bilan nomlar fazosida yangi elementni e'lon qilish mumkin emas.
Soha ichiga e'lon qilingan obyektlar e'lon paytidan boshlab ko'rinadi. Ularga soha nomi va :: ko'rinish sohaga kirish operatori bilan oshkora murojaat qilish mumkin, masalan,
demo::i = 100; demo::func2(10);
Agar nom ko'pincha o'z fazosidan tashqarida foydalanilsa, uni using operatori yordamida erishadigan qilib e'lon qilish mumkin:
using demo::i;
Shundan so'ng nomni sohaning oshkora ko'rsatilmasdan ham foydalanish mumkin.
Agar birorta sohadan barcha nomlarnierishadigan qismi talab etilsa using namespace operatori qo'llaniladi.
using namespace demo;
using va using namespace operatorlarini nomlangan sohada boshqa sohadagi e'lonlarni erishadigan qilish uchun uning ichidagi e'lonlardan foydalanish mumkin.
namespace Department_of_Applied_Mathematics{
using demo::i;
// …
}
Nomlangan sohada oshkora yoki using operatori yordamida e'lon qilingan nomlar using namespace operator yordamida e'lon qilingan nomlarga nisbatan afzallikka ega (ustma-ust turuvchi bir nechta nomlangan sohalarni ishga kiritilganda ahamiyatga ega).
Nomlar fazolar qisqa nomlari bir-biri bilan bahsga kirishadi, uzunlari real kodni yozishda amaliy emas, shuning uchun nomlar sinonimlarini kiritishga ruxsat beriladi:
namespace DAM = Department_of_Applied_Mathematics;
Do'stlaringiz bilan baham: |