C ++

C ++ vardų sritis

C ++ vardų sritis
Vardų sritis C ++ yra apibendrinta sritis. Jo deklaracija prasideda rezervuotu žodžiu, vardų sritimi, po kurio pasirenkamas programuotojo vardas, o tada breketų blokas. Bloke yra pagrindinės C ++ objektų, funkcijų ir kitų objektų deklaracijos ir (arba) apibrėžimai.

Apsvarstykite šiuos du skaliarinius teiginius pasauline apimtimi šioje programoje:

# įtraukti
naudojant vardų sritį std;
int varId = 5;
plūdė varId = 2.3;
int main ()

grąžinti 0;

Bandymas sudaryti šią programą sukelia kompiliavimo klaidą. Yra du kintamieji tuo pačiu pavadinimu, varId. Nors tai yra du skirtingi dviejų skirtingų tipų kintamieji, tarpt ir plūdė, kompiliatorius atmeta dvi deklaracijas, nes jos yra to paties pavadinimo. Ši programa išsprendžia šią problemą, deklaruodama kintamuosius tuo pačiu pavadinimu dviem skirtingais apibendrintais mastais:

# įtraukti
naudojant vardų sritį std;
vardų sritis NA

int varId = 5;

vardų sritis NB

plūdė varId = 2.3;

int main ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
grąžinti 0;

Rezultatas yra toks:

5
2.3

Pirmiau 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 ir NA sveikasis skaičius. Galiausiai, paleidus programą, buvo naudojamas tas pats dviejų skirtingų kintamųjų pavadinimas. Atminkite, kad norint pasiekti tą patį dviejų skirtingų kintamųjų pavadinimą, reikia naudoti tam tikrą vardų srities pavadinimą, po kurio nurodomas bendras identifikatorius. Vardų srities pavadinimą ir bendrą identifikatorių skiria srities skyros operatorius „::.„Vardų srities pavadinimas skirs objektus.

Šiame straipsnyje aprašoma pagrindinė vardų srities samprata ir jos naudojimas programavimo kalba C ++. Norėdami sekti šį straipsnį, turėtumėte turėti pagrindinių žinių apie C ++ kalbą. Jūs taip pat turėtumėte žinoti apie C ++ taikymo sritį, nors tai trumpai paaiškinta šiame straipsnyje. Norėdami sužinoti daugiau apie C ++ taikymo sritį, ieškokite frazės „Taikymo sritis C ++“ (be kabučių) bet kurio „Linuxxint“ paieškos laukelyje.„com“ tinklalapį ir paspauskite „Enter“. Tai pateks į šio autoriaus parašytą straipsnį.

Straipsnio turinys

Kas yra vardų sritis?

Deklaratyvus regionas yra didžiausia programos dalis, kurioje galioja subjekto (kintamojo) pavadinimas. Šis regionas vadinamas taikymo sritimi. Vardų sritis C ++ yra apibendrinta sritis, kurios pagrindinis tikslas yra išspręsti vardų konfliktus. Vardų srityje yra pagrindinės deklaracijos ir (arba) subjektų apibrėžimai.

Visuotinė vardų sritis ir jos problema

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

# įtraukti
naudojant vardų sritį std;
int ident = 55;
plūdės identifikatorius = 12.17;
int main ()

grąžinti 0;

Pirmiau pateiktoje programoje yra du kintamieji, abu vadinami tapatybė. Šie kintamieji yra pasaulinio masto; tai yra jie yra pasaulinėje vardų srityje. Bandant sukompiliuoti šią programą nepavyks gauti klaidos pranešimą. Visuotinė apimtis nepriima daugiau nei vieno kintamojo tuo pačiu pavadinimu, todėl reikia pritaikytos vardų srities.

Tinkinta vardų sritis

Vardų sritis neturi tik vieno vardo. Vietoje to, vardų srityje yra vardų rinkinys, kad būtų išvengta konflikto su kitais vardų rinkiniais. Norėdami išvengti mažesnio kodo konflikto, prieš kiekvieną pavadinimą įveskite vardų srities pavadinimą ir :: . Ši programa tai iliustruoja naudodama dvi pasirinktines vardų sritis:

# įtraukti
naudojant vardų sritį std;
vardų sritis NA

int varInt = 6;
plūdės flt;

vardų sritis NB

int varInt = 7;
plūdės flt;

int main ()

cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
NA :: flt = 2.5;
NB :: flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
grąžinti 0;

Rezultatas yra:

6
7
2.5
4.8

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

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

Naudojantis direktyva

Kad deklaruodami vardų sritį nevartotumėte visada įvesti „namepace :: name“, o ne tik „name“, galite naudoti naudojant direktyvą. Sintaksė, skirta naudoti naudojant direktyva yra tokia:

naudojant vardų sritį Namespace_name;

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

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

# įtraukti
naudojant vardų sritį std;
vardų sritis NB

int varInt = 7;
int func ()

grįžti varInt;


int fn ()

naudojant vardų sritį NB;
int myVar2 = func ();
// seka kiti objektai ir funkcijos iš NB.
grąžinti myVar2;

int myVar3 = NB :: func ();
int main ()

cout << fn() << " << myVar3 << '\n';
grąžinti 0;

Šios programos išvestis yra 7 7. Terminas "naudojant vardų sritį NB;"Buvo įdėtas į fn () apibrėžimas. The func () iš NB vardų srities vadinama šiek tiek žemiau, prieš tai nenurodant „NB ::.“

Kintamasis, deklaruojamas visuotinėje srityje (visuotinė vardų sritis), matomas nuo deklaravimo taško iki failo pabaigos. Tai taip pat matoma įdėtose vardų erdvėse (įdėtose apimtyse), pavyzdžiui, įdėtose fn () funkcijos apimtį aukščiau. The naudojant direktyva sujungia savo vardų sritį nuo pozicijos, kurioje ji yra, iki galo, kuriai ji yra.

Pavadinimas func () iš NB vardų erdvės nematyti žemiau fn () apibrėžimas, nes „naudojant vardų sritį NB; “ buvo įtrauktas į funkcijos sritį (blokas). Pagal šią sąlygą naudotifunc ()„Už NB vardų bloko (srities) ribų, prieš jį turi būti„NB ::,“, Kaip nurodyta šiame sakinyje:

int myVar3 = NB :: func ();

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

# įtraukti
naudojant vardų sritį std;
vardų sritis NA

int varInt = 6;
int func ()

grįžti varInt;


vardų sritis NB

int varInt = 7;
int func ()

grįžti varInt;


naudojant vardų sritį NA;
int myVar0 = varInt;
// seka kiti objektai ir funkcijos iš :: ir NB.
int fn ()

int myVar1 = varInt;
naudojant vardų sritį NB;
int myVar2 = NB :: func ();
// seka kiti objektai ir funkcijos nuo NB iki šios srities pabaigos.
grąžinti myVar1 + myVar2;

// Toliau seka tik objektai ir funkcijos iš :: ir NB.
int myVar3 = NB :: func ();
int main ()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
grąžinti 0;

Rezultatas yra 6, 13, 7.

Pastaba: Visuotinė vardų sritis žymima :: , tai reiškia, kad prieš srities sprendimo operatorių nieko nėra.

Po pareiškimu „naudojant vardų sritį NA;“Kintamuosius iš pasaulinės ir NA vardų srities galima naudoti nenurodant jų šaltinių vardų srities. Kitame teiginyje naudojamas varInt NA vardų srities. Bendrasis ir NA bendras vardų srities regionas tęsiasi į fn () funkcijos vardų sritis. Taigi varInt pirmojo pareiškimo fn () funkcijos sritis, yra NA vardų sritis.

Kadangi visuotinės ir NA vardų srities regionas tęsiasi visoje fn () taikymo sritį, point myVar2 = NB :: func ();,"Bet kurį vardą iš NB vardų srities galima naudoti tik fn () taikymo sritį, prieš tai nenurodant „NB ::,“Tik tuo atveju, jei to nebuvo NA ir pasaulinėse vardų erdvėse (blokuose). Priešingu atveju prieš jį turėtų būtiNB ::."NA ir pasaulinių bendrų vardų sričių regionas tęsiasi žemiau fn () apibrėžimą ir į pagrindinis () iki failo pabaigos.

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

Pastaba: Vardų erdvėse, kurių regionai yra sujungti, skirtinguose vardų srities blokuose neturėtų būti tas pats kintamojo vardas, nes tai vis tiek sukeltų konfliktą.

Vardų srities regionai

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

Teigiama, kad vardų srities turinyje deklaruoti subjektai yra vardų srities nariai, o vardai, kuriuos šiose deklaracijose įvesta į deklaruojamąjį vardų srities regioną, yra vardų srities vardai.

Įterptosios vardų erdvės

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

# įtraukti
naudojant vardų sritį std;
vardų sritis A

int i = 1;
vardų sritis B

int i = 2;
vardų sritis C

int i = 3;



int main ()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
grąžinti 0;

Rezultatas yra:

1 2 3

Atkreipkite dėmesį, kad prie trijų reikšmių buvo prisijungta naudojant srities raiškos 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šytos kaip standartinis. Standartinėje bibliotekoje yra antrinės bibliotekos, viena iš šių yra iostream. The iostream bibliotekoje yra objektas cout, kuris naudojamas rezultatams siųsti į konsolę (terminalą).

Pavadinimas cout turi būti standartinis vardų sritis. Naudoti iostream su jos standartinis vardų srities programa turėtų būti tokia:

# įtraukti
naudojant vardų sritį std;

Atkreipkite dėmesį į naudojant direktyva ir standartinis. Terminas "# įtraukti “Yra išankstinio procesoriaus direktyva ir nesibaigia kabliataškiu. Tai apima „iostream“ failą, esantį jos direktyvoje.

Išvada

Vardų sritis yra taikymo sritis. Vardų srities apraše (apibrėžime) yra pagrindinės C ++ objektų, funkcijų ir kitų objektų deklaracijos ir (arba) apibrėžimai. Už vardų srities apibrėžimo vardą galima pasiekti naudojant sintaksę „namespaceName :: vardas.“Be pasaulinės vardų srities (visuotinės apimties), bet kokia vardų sritis turėtų būti deklaruojama bloku. Tas blokas yra pirmoji galimai paskirstytų vardų srities regionų dalis. Su naudojant direktyvą, vardų sritis gali būti išplėsta kaip regionai kitose srityse. Vardų erdvėse, kurių regionai yra sujungti, skirtinguose vardų srities blokuose neturėtų būti tas pats kintamojo vardas, nes tai vis tiek sukeltų vardų konfliktą.

Chrys

5 geriausi „Arcade“ žaidimai, skirti „Linux“
Šiais laikais kompiuteriai yra rimta mašina, naudojama žaidimams. Jei negalėsite gauti naujo aukšto rezultato, žinosite, ką noriu pasakyti. Šiame įraš...
Mūšis už Wesnothą 1.13.6 Išleista plėtra
Mūšis už Wesnothą 1.13.6 išleistas praėjusį mėnesį, yra šeštasis 1 versijos kūrimo leidimas.13.„x“ serija ir ji teikia daug patobulinimų, ypač vartoto...
Kaip įdiegti „League of Legends“ „Ubuntu 14“.04
Jei esate „League of Legends“ gerbėjas, tai jums yra galimybė išbandyti „League of Legends“. Atminkite, kad LOL palaikoma „PlayOnLinux“, jei esate „Li...