C ++ vārda telpa

C Namespace



Vārdu telpa C ++ ir vispārināta darbības joma. Tās deklarācija sākas ar rezervēto vārdu, vārda telpu, kam seko programmētāja izvēlēts nosaukums, un pēc tam iekavu iekavās. Blokā ir C ++ objektu, funkciju un citu entītiju pamata deklarācijas un/vai definīcijas.

Apsveriet šādus divus skalārus apgalvojumus globālā mērogā šajā programmā:







#iekļaut
izmantojot nosaukumvietas std;

intvarId= 5;
peldētvarId= 2.3;

intgalvenais()
{

atgriezties 0;
}

Mēģinājums apkopot šo programmu noved pie apkopošanas kļūdas. Ir divi mainīgie ar tādu pašu nosaukumu, varId . Lai gan tie ir divi dažādi divu veidu mainīgie, int un peldēt , sastādītājs noraida abas deklarācijas, jo tās ir ar tādu pašu nosaukumu. Šī programma atrisina šo problēmu, deklarējot mainīgos ar tādu pašu nosaukumu divās dažādās vispārinātās darbības jomās:



#iekļaut
izmantojot nosaukumvietas std;

nosaukumvieta NA
{
intvarId= 5;
}

vārdu telpa NB
{
peldētvarId= 2.3;
}

intgalvenais()
{
izmaksas<<NA::varId << ' n';
izmaksas<<NB!::varId << ' n';

atgriezties 0;
}

Rezultāts ir šāds:



5
2.3

Iepriekš minētajā programmā ir divas nosaukumu telpas: NA , kam ir vesela skaitļa definīcija, un NB! , kam ir pludiņa definīcija, bet ar tādu pašu nosaukumu kā NA veselajam skaitlim. Visbeidzot, kad programma tika palaista, tika izmantots viens un tas pats nosaukums diviem dažādiem mainīgajiem. Ņemiet vērā, ka, lai piekļūtu vienam un tam pašam divu mainīgo nosaukumam, jāizmanto konkrētais nosaukumvietas nosaukums, kam seko kopējais identifikators. Nosaukuma telpas nosaukumu un kopējo identifikatoru atdala darbības jomas izšķirtspējas operators, :: . Nosaukumu telpu nosaukums atšķirs objektus.





Šajā rakstā ir apskatīta vārdtelpas pamatjēdziens un tā lietošana programmēšanas valodā C ++. Lai sekotu šim rakstam, jums jābūt pamatzināšanām par C ++ valodu. Jums vajadzētu arī zināt par C ++ darbības jomu, lai gan tas ir īsi paskaidrots šajā rakstā. Lai uzzinātu vairāk par C ++ darbības jomu, jebkuras linuxhint.com tīmekļa lapas meklēšanas lodziņā meklējiet frāzi Scope in C ++ (bez pēdiņām) un nospiediet taustiņu Enter. Tādējādi jūs nonāksit pie šī autora raksta.

Raksta saturs

Kas ir vārda telpa?

Deklarējošais reģions ir lielākā programmas daļa, kurā ir derīgs entītijas nosaukums (mainīgais). Šo reģionu sauc par darbības jomu. Vārdu telpa C ++ ir vispārināta darbības joma, kuras galvenais mērķis ir atrisināt nosaukumu konfliktus. Vārdu telpā ir pamata deklarācijas un/vai entītiju definīcijas.



Globālā nosaukumu telpa un tās problēma

Globālā nosaukumu telpa ir globāla darbības joma. Apsveriet šādu īsu programmu:

#iekļaut
izmantojot nosaukumvietas std;

intidentitāte= 55;
peldētidentitāte= 12.17;

intgalvenais()
{

atgriezties 0;
}

Iepriekš minētajā programmā ir divi mainīgie, abi tiek saukti identitāte . Šie mainīgie ir pasaules mērogā; tas ir, tie atrodas globālajā nosaukumu telpā. Mēģinājums apkopot šo programmu neizdosies ar kļūdas ziņojumu. Globālais tvērums nepieņem vairāk nekā vienu mainīgo ar tādu pašu nosaukumu, tāpēc ir nepieciešama pielāgota nosaukumvieta.

Pielāgota nosaukumvieta

Vārdu telpai nav tikai viena nosaukuma. Tā vietā nosaukumvietai ir nosaukumu kopa, lai izvairītos no konfliktiem ar citām nosaukumu kopām. Lai izvairītos no konfliktiem zemāk kodā, pirms katra vārda norādiet nosaukumvietas nosaukumu un :: . Šī programma to ilustrē, izmantojot divas pielāgotas nosaukumu telpas:

#iekļaut
izmantojot nosaukumvietas std;

nosaukumvieta NA
{
intmainīgs= 6;
peldētflt;
}

vārdu telpa NB
{
intmainīgs= 7;
peldētflt;
}

intgalvenais()
{
izmaksas<<NA::mainīgs << ' n';
izmaksas<<NB!::mainīgs << ' n';
NA::flt = 2.5;
NB!::flt = 4.8;
izmaksas<<NA::flt << ' n';
izmaksas<<NB!::flt << ' n';

atgriezties 0;
}

Rezultāts ir šāds:

6
7
2.5
4.8

Ņemiet vērā, ka nosaukumi NA :: flt un NB: flt galu galā ir definēti galvenais () funkciju. C ++ nepieļauj šādu definīciju globālajā tvērumā.

Ņemiet vērā, ka pielāgotā nosaukumvieta ir ligzdota vārdtelpa globālajai nosaukumvietai.

Lietošanas direktīva

Lai izvairītos no nosaukumvietas :: name ierakstīšanas visu laiku, nevis tikai pēc nosaukuma telpas deklarēšanas, varat izmantot izmantojot direktīva. Lietošanas sintakse izmantojot direktīva ir šāda:

izmantojot vārda telpu Nosaukuma_nosaukums;

The izmantojot direktīva nav priekšapstrādātāja direktīva, tāpēc tā beidzas ar semikolu (;).

Šī programma ilustrē izmantojot direktīva un vairāk:

#iekļaut
izmantojot nosaukumvietas std;

vārdu telpa NB
{
intmainīgs= 7;
intfunkciju()
{
atgrieztiesmainīgs;
}
}

intfn()
{
izmantojot nosaukumvietu NB;
intmyVar2=funkciju();
// seko citi objekti un funkcijas no NB.
atgrieztiesmyVar2;
}

intmyVar3=NB!::funkciju();

intgalvenais()
{
izmaksas<<fn() << '' <<myVar3<< ' n';

atgriezties 0;
}

Šīs programmas iznākums ir 7 7 . Termiņš izmantojot nosaukumvietu NB; ir ievietots gada sākumā fn () definīcija. The func () no NB nosaukumvietas tiek izsaukts tieši zem tā, bez iepriekšējā NB: .

Mainīgais, kas deklarēts globālajā tvērumā (globālā nosaukumu telpā), ir redzams no deklarēšanas punkta līdz faila beigām. Tas ir redzams arī ligzdotajās nosaukumvietās (ligzdotajās darbības jomās), piemēram, ligzdotajās fn () funkciju diapazons iepriekš. The izmantojot direktīva pievienojas tās nosaukumvietai no vietas, kurā tā ir ievietota, līdz tās darbības jomas beigām, kurā tā ir ievietota.

Vārds func () no NB nosaukumvietas nevar redzēt zem fn () definīcija, jo izmantojot nosaukumvietu NB; tika iekļauts funkciju diapazonā (blokā). Saskaņā ar šo nosacījumu lietot func () ārpus NB nosaukumvietas bloka (tvēruma), pirms tā ir jābūt NB: , kā šādā paziņojumā:

intmyVar3=NB!::funkciju();

The izmantojot direktīva savieno savu nosaukumvietu ar ārējo ligzdošanas nosaukumvietu no vietas, kurā tā tiek novietota, līdz ārējās ligzdošanas nosaukumvietas beigām. Nākamajā programmā NA nosaukumvieta ir savienota ar globālo nosaukumvietu. Abas nosaukumvietas paplašinās fn () funkciju definīcijas nosaukumvieta, kurā tie ir savienoti ar NB nosaukumvietu. NB nosaukumvieta beidzas fn () funkcijas definīcija, un divas iepriekšējās nosaukumvietas turpinās līdz faila beigām (izlasiet kodu).

#iekļaut
izmantojot nosaukumvietas std;

nosaukumvieta NA
{
intmainīgs= 6;
intfunkciju()
{
atgrieztiesmainīgs;
}

}

vārdu telpa NB
{
intmainīgs= 7;
intfunkciju()
{
atgrieztiesmainīgs;
}
}

izmantojot nosaukumvietu NA;
intmyVar0=mainīgs;
// seko citi objekti un funkcijas no :: un NB.

intfn()
{
intmyVar1=mainīgs;
izmantojot nosaukumvietu NB;
intmyVar2=NB!::funkciju();
// seko citi objekti un funkcijas no NB līdz šīs darbības jomas beigām.
atgrieztiesmyVar1+myVar2;
}

// Seko tikai objekti un funkcijas no :: un NB.

intmyVar3=NB!::funkciju();

intgalvenais()
{
izmaksas<<myVar0<< '' <<fn() << '' <<myVar3<< ' n';

atgriezties 0;
}

Izeja ir 6, 13, 7 .

Piezīme: Globālā nosaukumvieta ir apzīmēta ar :: , kas nozīmē, ka pirms darbības jomas izšķirtspējas operatora nekas nav redzams.

Zem paziņojuma ,. izmantojot nosaukumvietu NA; mainīgos no globālās un NA nosaukumvietas var izmantot, nenorādot to avota nosaukumvietu. Nākamais paziņojums izmanto mainīgs no NA nosaukumvietas. Globālais un NA apvienotais nosaukumvietas reģions sniedzas fn () funkciju nosaukumvieta. Tātad, mainīgs pirmajā paziņojumā fn () funkciju diapazons ir NA nosaukumvietā.

Tā kā reģions globālajām un NA nosaukumvietām sniedzas visā fn () darbības joma, pēc int myVar2 = NB :: func (); , jebkuru nosaukumu no NB nosaukumvietas var izmantot tikai fn () darbības jomu, pirms tam nenorādot NB: , tikai tad, ja tas nenotika NA un globālajās nosaukumu telpās (blokos). Pretējā gadījumā pirms tā vajadzētu būt NB: . Apvienoto NA un globālo nosaukumvietu reģions turpinās zem fn () definīcijā un galvenais () funkciju līdz faila beigām.

NB nosaukumvietas paplašināšana sākas no int myVar2 = NB :: func (); iekš fn () bloks un beidzas beigās fn () definīcijas bloks.

Piezīme: Nosaukumu telpām, kuru reģioni ir pievienoti, dažādos nosaukumvietas blokos nedrīkst būt vienāds mainīgā nosaukums, jo tas joprojām izraisītu konfliktus.

Vārdu telpas reģioni

Vārdu telpa ir darbības joma. Izņemot globālo nosaukumvietu (globālo darbības jomu), jebkura nosaukumvieta ir jādeklarē blokā. Šis bloks ir nosaukumvietas, iespējams, izplatīto reģionu pirmā daļa. Izmantojot lietošanas direktīvu, nosaukumu telpu var paplašināt kā reģionus citās darbības jomās.

Vārdu telpas pamattekstā deklarētās entītijas ir nosaukumvietas locekļi, un nosaukumi, kas ar šīm deklarācijām ievadīti nosaukumvietas deklaratīvajā reģionā, tiek uzskatīti par vārda telpas dalībnieku nosaukumiem.

Ligzdotas vārda telpas

Šī programma parāda ligzdotas nosaukumvietas:

#iekļaut
izmantojot nosaukumvietas std;

vārda telpa A.
{
inti= 1;
vārdtelpa B
{
inti= 2;
nosaukumvieta C
{
inti= 3;
}
}
}

intgalvenais()
{
izmaksas<<TO::i << '' <<TO::B::i << '' <<TO::B::C::i << ' n';

atgriezties 0;
}

Rezultāts ir šāds:

1 2 3

Ievērojiet, ka trīs vērtības ir pieejamas, izmantojot darbības jomas izšķirtspējas operatoru.

Standarta nosaukumu telpa

C ++ ir bibliotēka, ko sauc par standarta bibliotēku. Šajā bibliotēkā esošo objektu, funkciju un citu entītiju nosaukumi ir no nosaukumvietas, ko sauc par standarta nosaukumvietu, rakstīts kā stundas . Standarta bibliotēkā ir apakšbibliotēkas, un viena no šīm apakšbibliotēkām ir iostream . The iostream bibliotēka satur objektu izmaksas , ko izmanto rezultātu nosūtīšanai uz konsoli (termināli).

Vārds izmaksas jābūt stundas vārda telpa. Izmantot iostream ar savu stundas nosaukumvietā, programmai jābūt šādai:

#iekļaut
izmantojot nosaukumvietas std;

Ievērojiet izmantojot direktīvu un stundas . Termiņš #iekļaut ir priekšapstrādātāja direktīva un nebeidzas ar semikolu. Tas ietver iostream failu tās direktīvas vietā.

Secinājums

Vārdu telpa ir darbības joma. Nosaukuma vietas aprakstā (definīcijā) ir C ++ objektu, funkciju un citu entītiju pamata deklarācijas un/vai definīcijas. Ārpus nosaukumvietas definīcijas nosaukumam var piekļūt ar sintaksi, namespaceName :: nosaukums . Izņemot globālo nosaukumvietu (globālo darbības jomu), jebkura nosaukumvieta ir jādeklarē blokā. Šis bloks ir nosaukumvietas, iespējams, izplatīto reģionu pirmā daļa. Ar izmantojot direktīvu, nosaukumu telpu var paplašināt kā reģionus citās jomās. Nosaukumu telpām, kuru reģioni ir pievienoti, dažādos nosaukumvietas blokos nedrīkst būt vienāds mainīgā nosaukums, jo tas joprojām izraisītu nosaukumu konfliktu.

Chrys