Nomlar maydoni bu uning ichidagi identifikatorlar (turlar, funktsiyalar, o'zgaruvchilar va boshqalar nomlari) qamrovini ta'minlaydigan deklarativ hudud



Download 34,06 Kb.
bet3/4
Sana06.07.2022
Hajmi34,06 Kb.
#749870
1   2   3   4
Bog'liq
1-Mustaqil ish

std nom maydoni


Barcha C++ standart kutubxona turlari va funktsiyalari stdnomlar maydonida yoki ichkariga joylashtirilgan nomlar bo'shliqlarida e'lon qilinadi std.

Ichki nom maydonlari


Nomlar bo'shliqlari o'rnatilgan bo'lishi mumkin. Quyidagi misolda ko'rsatilganidek, oddiy ichki o'rnatilgan nom maydoni o'zining ota-ona a'zolariga malakasiz kirish huquqiga ega, lekin ota-ona a'zolari ichki o'rnatilgan nomlar maydoniga (agar u inline sifatida e'lon qilinmasa) malakasiz kirish huquqiga ega emas:
namespace ContosoDataServer
{
void Foo();


namespace Details
{
int CountImpl;
void Ban() { return Foo(); }
}


int Bar(){...};
int Baz(int i) { return Details::CountImpl; }
}
Oddiy ichki o'rnatilgan nomlar bo'shliqlari ota-ona nomlar maydonining umumiy interfeysining bir qismi bo'lmagan ichki amalga oshirish tafsilotlarini qamrab olish uchun ishlatilishi mumkin.

Inline nom maydonlari (C++ 11)


Oddiy ichki nom maydonidan farqli o'laroq, ichki nomlar maydoni a'zolari ota-ona nom maydonining a'zolari sifatida ko'rib chiqiladi. Bu xususiyat haddan tashqari yuklangan funksiyalarni argumentga bog‘liq holda qidirishni ota-ona va ichki o‘rnatilgan nom maydonida ortiqcha yuklangan funksiyalar ustida ishlash imkonini beradi. Shuningdek, u inline nom maydonida e'lon qilingan shablon uchun ota-ona nom maydonida ixtisoslashuvni e'lon qilish imkonini beradi. Quyidagi misol tashqi kodning sukut bo'yicha ichki nom maydoniga qanday bog'lanishini ko'rsatadi:
//Header.h
#include


namespace Test
{
namespace old_ns
{
std::string Func() { return std::string("Hello from old"); }
}


inline namespace new_ns
{
std::string Func() { return std::string("Hello from new"); }
}
}


#include "header.h"
#include
#include


int main()
{
using namespace Test;
using namespace std;


string s = Func();
std::cout << s << std::endl; // "Hello from new"
return 0;
}
Quyidagi misol ichki nom maydonida e'lon qilingan shablonning ota-onasida ixtisoslikni qanday e'lon qilishingiz mumkinligini ko'rsatadi:
namespace Parent
{
inline namespace new_ns
{
template
struct C
{
T member;
};
}
template<>
class C {};
}
Kutubxonaning umumiy interfeysidagi o'zgarishlarni boshqarish uchun versiya mexanizmi sifatida inline nom maydonlaridan foydalanishingiz mumkin. Masalan, siz bitta ota-ona nom maydonini yaratishingiz va interfeysning har bir versiyasini ota-ona ichiga joylashtirilgan o'z nom maydoniga joylashtirishingiz mumkin. Eng so'nggi yoki afzal qilingan versiyani o'z ichiga olgan nom maydoni inline sifatida tasniflanadi va shuning uchun u ota-ona nom maydonining bevosita a'zosi kabi ko'rsatiladi. Parent::Classni chaqiruvchi mijoz kodi avtomatik ravishda yangi kodga ulanadi. Eski versiyadan foydalanishni ma'qul ko'rgan mijozlar ushbu kodga ega bo'lgan ichki nomlar maydoniga to'liq malakali yo'ldan foydalangan holda unga kirishlari mumkin.
Inline kalit so'zi kompilyatsiya birligidagi nomlar maydonining birinchi deklaratsiyasiga qo'llanilishi kerak.
Quyidagi misol interfeysning ikkita versiyasini ko'rsatadi, ularning har biri ichki nomlar maydonida. Nomlar maydoni interfeysdan v_20ba'zi o'zgarishlarga ega v_10va inline sifatida belgilangan. Yangi kutubxona va qo'ng'iroqlardan foydalanadigan mijoz kodi Contoso::Funcs::Addv_20 versiyasini ishga tushiradi. Qo'ng'iroq qilishga urinayotgan kod Contoso::Funcs::Divideendi kompilyatsiya vaqtida xatolikni oladi. Agar ularga haqiqatan ham ushbu funktsiya kerak bo'lsa, ular v_10aniq qo'ng'iroq qilish orqali versiyaga kirishlari mumkin Contoso::v_10::Funcs::Divide.
namespace Contoso
{
namespace v_10
{
template
class Funcs
{
public:
Funcs(void);
T Add(T a, T b);
T Subtract(T a, T b);
T Multiply(T a, T b);
T Divide(T a, T b);
};
}


inline namespace v_20
{
template
class Funcs
{
public:
Funcs(void);
T Add(T a, T b);
T Subtract(T a, T b);
T Multiply(T a, T b);
std::vector Log(double);
T Accumulate(std::vector nums);
};
}
}

Download 34,06 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