C ++ vardų sritis

C Namespace



Vardų sritis C ++ yra apibendrinta apimtis. Jo deklaracija prasideda rezervuotu žodžiu vardų sritis, po kurio seka programuotojo pasirinktas pavadinimas, o po to skliausteliuose esantis blokas. Bloke yra pagrindinės C ++ objektų, funkcijų ir kitų objektų deklaracijos ir (arba) apibrėžimai.

Šioje programoje apsvarstykite šiuos du pasaulinės apimties teiginius:







#įtraukti
naudojant vardų srities standartą;

tarptkintamas= 5;
plūdėkintamas= 2.3;

tarptpagrindinis()
{

grįžti 0;
}

Bandant sudaryti šią programą atsiranda kompiliavimo klaida. Yra du kintamieji tuo pačiu pavadinimu, kintamas . Nors jie yra du skirtingi dviejų tipų kintamieji, tarpt ir plūdė , kompiliatorius atmeta abi deklaracijas, nes jos yra to paties pavadinimo. Ši programa išsprendžia šią problemą, deklaruodama kintamuosius tuo pačiu pavadinimu dviem skirtingomis apibendrintomis sritimis:



#įtraukti
naudojant vardų srities standartą;

vardų sritis NA
{
tarptkintamas= 5;
}

vardų sritis NB
{
plūdėkintamas= 2.3;
}

tarptpagrindinis()
{
kaina<<NA::kintamas << ' n';
kaina<<NB::kintamas << ' n';

grįžti 0;
}

Išėjimas yra toks:



5
2.3

Aukščiau pateiktoje programoje yra dvi vardų sritys: NA , kuris turi sveiko skaičiaus apibrėžimą, ir NB , kuris turi plūdės apibrėžimą, bet tuo pačiu pavadinimu kaip sveikasis skaičius NA. Galiausiai, kai programa buvo paleista, buvo naudojamas tas pats dviejų skirtingų kintamųjų pavadinimas. Atminkite, kad norint pasiekti tą patį dviejų skirtingų kintamųjų pavadinimą, reikia naudoti konkretų vardų srities pavadinimą, po kurio eina bendras identifikatorius. Vardų srities pavadinimą ir bendrąjį identifikatorių skiria apimties sprendimo operatorius, :: . Vardų erdvių pavadinimai skirs objektus.





Šiame straipsnyje aptariama pagrindinė vardų srities sąvoka ir jos naudojimas C ++ programavimo kalba. Norėdami sekti šį straipsnį, turite turėti pagrindines C ++ kalbos žinias. Jūs taip pat turėtumėte žinoti apie C ++ taikymo sritį, nors ji trumpai paaiškinta šiame straipsnyje. Norėdami sužinoti daugiau apie C ++ taikymo sritį, bet kurio linuxhint.com tinklalapio paieškos laukelyje ieškokite frazės „Scope in C ++“ (be kabučių) ir paspauskite „Enter“. Tai atvers jus prie šio autoriaus parašyto straipsnio.

Straipsnio turinys

Kas yra vardų sritis?

Deklaracinis regionas yra didžiausia programos dalis, kurioje galioja subjekto (kintamojo) pavadinimas. Šis regionas vadinamas apimtimi. Vardų sritis C ++ yra apibendrinta apimtis, kurios pagrindinis tikslas yra išspręsti vardų konfliktus. Vardų sritis turi pagrindines objektų deklaracijas ir (arba) apibrėžimus.



Pasaulinė vardų erdvė ir jos problema

Pasaulinė vardų sritis yra pasaulinė sritis. Apsvarstykite šią trumpą programą:

#įtraukti
naudojant vardų srities standartą;

tarpttapatybė= 55;
plūdėtapatybė= 12.17;

tarptpagrindinis()
{

grįžti 0;
}

Ankstesnėje programoje yra du kintamieji, abu vadinami tapatybė . Šie kintamieji yra visuotinėje srityje; tai yra, jie yra pasaulinėje vardų erdvėje. Bandymas sukompiliuoti šią programą nepavyks su klaidos pranešimu. Visuotinė apimtis nepriima daugiau nei vieno kintamojo tuo pačiu pavadinimu, todėl reikia tinkintos vardų srities.

Tinkinta vardų sritis

Vardų sritis neturi tik vieno pavadinimo. Vietoj to, vardų sritis turi pavadinimų rinkinį, kad būtų išvengta konflikto su kitais pavadinimų rinkiniais. Kad išvengtumėte konflikto, esantį žemiau esančiame kode, prieš kiekvieną pavadinimą nurodykite vardų srities pavadinimą ir :: . Ši programa tai iliustruoja naudojant dvi pasirinktines vardų sritis:

#įtraukti
naudojant vardų srities standartą;

vardų sritis NA
{
tarptkintamas= 6;
plūdėflt;
}

vardų sritis NB
{
tarptkintamas= 7;
plūdėflt;
}

tarptpagrindinis()
{
kaina<<NA::kintamas << ' n';
kaina<<NB::kintamas << ' n';
NA::flt = 2.5;
NB::flt = 4.8;
kaina<<NA::flt << ' n';
kaina<<NB::flt << ' n';

grįžti 0;
}

Išėjimas yra:

6
7
2.5
4.8

Atkreipkite dėmesį, kad pavadinimai NA :: flt ir NB :: flt galiausiai buvo apibrėžti pagrindinis () funkcija. C ++ neleidžia tokio apibrėžimo visuotinėje srityje.

Atminkite, kad pasirinktinė vardų sritis yra visuotinės vardų srities įterpta vardų sritis.

Naudojimo direktyva

Norėdami išvengti vardų srities :: name nuolatinio įvedimo, o ne tik pavadinimo, paskelbę vardų sritį, galite naudoti naudojant direktyva. Naudojimo sintaksė naudojant direktyva yra tokia:

naudojant vardų sritį Vardų srities_pavadinimas;

The naudojant direktyva nėra išankstinio apdorojimo direktyva, todėl ji baigiasi kabliataškiu (;).

Ši programa iliustruoja naudojimą naudojant direktyva ir dar daugiau:

#įtraukti
naudojant vardų srities standartą;

vardų sritis NB
{
tarptkintamas= 7;
tarptfunkcija()
{
grįžtikintamas;
}
}

tarptfn()
{
naudojant vardų sritį NB;
tarptmyVar2=funkcija();
// kiti objektai ir funkcijos iš NB.
grįžtimyVar2;
}

tarptmyVar3=NB::funkcija();

tarptpagrindinis()
{
kaina<<fn() << '' <<myVar3<< ' n';

grįžti 0;
}

Šios programos rezultatas yra 7 7 . Terminas naudojant vardų sritį NB; buvo patalpintas pradžioje fn () apibrėžimas. The func () iš NB vardų srities vadinamas tik žemiau, be prieš tai NB :: .

Kintamasis, paskelbtas visuotinėje apimtyje (visuotinė vardų sritis), matomas nuo deklaravimo taško iki failo pabaigos. Jis taip pat matomas įdėtose vardų erdvėse (įdėtose apimtyse), pvz., Įdėtose fn () funkcijų apimtis aukščiau. The naudojant direktyva sujungia savo vardų sritį nuo padėties, kurioje ji yra, iki taikymo srities, kurioje ji yra, pabaigos.

Pavadinimas func () iš NB vardų srities negalima matyti žemiau fn () apibrėžimas, nes naudojant vardų sritį NB; buvo įtrauktas į funkcijų sritį (bloką). Esant tokioms sąlygoms, naudoti func () prieš NB vardų srities bloką (apimtį), prieš jį turi būti NB :: , kaip ir šiame teiginyje:

tarptmyVar3=NB::funkcija();

The naudojant direktyva sujungia savo vardų sritį su išorine lizdų vardų sritimi nuo vietos, kurioje ji yra, iki išorinės lizdų vardų srities pabaigos. Šioje programoje NA vardų sritis sujungiama su visuotine vardų sritimi. Abi vardų sritys tęsiasi į fn () funkcijos apibrėžimo vardų sritį, kurioje jie yra sujungti su NB vardų sritimi. NB vardų sritis baigiasi fn () funkcijos apibrėžimas, o dvi ankstesnės vardų sritys tęsiasi iki failo pabaigos (perskaitykite kodą).

#įtraukti
naudojant vardų srities standartą;

vardų sritis NA
{
tarptkintamas= 6;
tarptfunkcija()
{
grįžtikintamas;
}

}

vardų sritis NB
{
tarptkintamas= 7;
tarptfunkcija()
{
grįžtikintamas;
}
}

naudojant vardų sritį NA;
tarptmyVar0=kintamas;
// kiti objektai ir funkcijos iš :: ir NB.

tarptfn()
{
tarptmyVar1=kintamas;
naudojant vardų sritį NB;
tarptmyVar2=NB::funkcija();
// kiti objektai ir funkcijos nuo NB iki šios apimties pabaigos.
grįžtimyVar1+myVar2;
}

// Toliau pateikiami tik objektai ir funkcijos iš :: ir NB.

tarptmyVar3=NB::funkcija();

tarptpagrindinis()
{
kaina<<myVar0<< '' <<fn() << '' <<myVar3<< ' n';

grįžti 0;
}

Išėjimas yra 6, 13, 7 .

Pastaba: Pasaulinė vardų sritis žymima simboliu :: , o tai reiškia, kad prieš sekantį apimties sprendimo operatorių nėra nieko.

Po pareiškimu, naudojant vardų sritį NA; kintamieji iš pasaulinių ir NA vardų sričių gali būti naudojami nenurodant jų šaltinio vardų srities. Kitas teiginys naudoja kintamas NA vardų srities. Pasaulinis ir NA jungtinis vardų srities regionas apima fn () funkcijų vardų sritis. Taigi kintamas pirmojo pareiškimo fn () funkcijos apimtis, yra NA vardų srities.

Kadangi pasaulinių ir NA vardų sričių regionas apima visą fn () apimtis, po int myVar2 = NB :: func (); , bet koks pavadinimas iš NB vardų srities gali būti naudojamas tik fn () taikymo sritį, prieš tai nenurodant NB :: , tik jei to nebuvo NA ir pasaulinėse vardų erdvėse (blokuose). Priešingu atveju prieš tai turėtų būti NB :: . Sujungtų NA ir pasaulinių vardų sričių regionas tęsiasi žemiau fn () apibrėžimą ir į pagrindinis () funkcija iki failo pabaigos.

NB vardų srities išplėtimas prasideda nuo int myVar2 = NB :: func (); viduje konors fn () blokas ir baigiasi fn () apibrėžimo blokas.

Pastaba: Vardų erdvės, kurių regionai yra sujungti, skirtinguose vardų erdvės blokuose neturėtų turėti to paties kintamojo pavadinimo, nes tai vis tiek sukeltų konfliktą.

Vardų srities regionai

Vardų sritis yra apimtis. Be pasaulinės vardų srities (visuotinės apimties), bet kokia vardų sritis turėtų būti deklaruojama bloke. Šis blokas yra pirmoji galimai paskirstytų vardų srities dalių dalis. Naudojant direktyvą, vardų sritis gali būti išplėsta kaip regionai kitose srityse.

Sakoma, kad vardų srities tekste deklaruojami objektai yra vardų srities nariai, o pavadinimai, įvesti šiomis deklaracijomis į vardų srities deklaratyvųjį regioną, yra vardų srities narių pavadinimai.

Įdėtos vardų erdvės

Ši programa rodo įdėtus vardų sritis:

#įtraukti
naudojant vardų srities standartą;

vardų sritis A.
{
tarpti= 1;
vardų sritis B.
{
tarpti= 2;
vardų sritis C.
{
tarpti= 3;
}
}
}

tarptpagrindinis()
{
kaina<<Į::i << '' <<Į::B::i << '' <<Į::B::C::i << ' n';

grįžti 0;
}

Išėjimas yra:

1 2 3

Atkreipkite dėmesį, kad trys vertės buvo pasiektos naudojant apimties skyros operatorių.

Standartinė vardų sritis

„C ++“ turi biblioteką, vadinamą standartine biblioteka. Šios bibliotekos objektų, funkcijų ir kitų objektų pavadinimai yra iš vardų srities, vadinamos standartine vardų sritimi, parašyta kaip valandų . Standartinėje bibliotekoje yra papildomos bibliotekos, o viena iš šių bibliotekų yra iostream . The iostream bibliotekoje yra objektas kaina , kuris naudojamas rezultatams siųsti į konsolę (terminalą).

Pavadinimas kaina turi būti valandų vardų sritis. Naudoti iostream su jo valandų vardų sritį, programa turėtų būti tokia:

#įtraukti
naudojant vardų srities standartą;

Atkreipkite dėmesį į naudojimą naudojant direktyva ir valandų . Terminas #įtraukti yra išankstinio apdorojimo direktyva ir nesibaigia kabliataškiu. Jame yra „iostream“ failas, nurodytas jo direktyvoje.

Išvada

Vardų sritis yra apimtis. Vardų srities aprašyme (apibrėžime) yra pagrindinės C ++ objektų, funkcijų ir kitų objektų deklaracijos ir (arba) apibrėžimai. Už vardų srities apibrėžimo pavadinimą galima pasiekti naudojant sintaksę, namespaceName :: vardas . Be pasaulinės vardų srities (visuotinės apimties), bet kokia vardų sritis turėtų būti deklaruojama bloke. Šis blokas yra pirmoji galimai paskirstytų vardų srities dalių dalis. Su naudojant direktyvą, vardų sritis gali būti išplėsta kaip regionai kitose srityse. Vardų erdvės, kurių regionai yra sujungti, skirtinguose vardų erdvės blokuose neturėtų turėti to paties kintamojo pavadinimo, nes tai vis tiek sukeltų vardų konfliktą.

Chrys