C ++ navneplass

C Namespace



Et navneområde i C ++ er et generalisert omfang. Erklæringen begynner med det reserverte ordet, navneområdet, etterfulgt av et navn etter programmererens valg, og deretter blokken i tannregulering. Blokken inneholder grunnleggende deklarasjoner og/eller definisjoner av C ++ - objekter, funksjoner og andre enheter.

Vurder følgende to skalaruttalelser i et globalt omfang, i følgende program:







#inkludere
ved hjelp av navneområde std;

intvarId= 5;
flytevarId= 2.3;

inthoved-()
{

komme tilbake 0;
}

Et forsøk på å kompilere dette programmet fører til en kompilasjonsfeil. Det er to variabler med samme navn, varId . Selv om de er to forskjellige variabler av to forskjellige typer, int og flyte , avviser kompilatoren de to deklarasjonene fordi de har samme navn. Følgende program løser dette problemet ved å deklarere variablene med samme navn i to forskjellige generaliserte omfang:



#inkludere
ved hjelp av navneområde std;

navnerom NA
{
intvarId= 5;
}

navneplass NB
{
flytevarId= 2.3;
}

inthoved-()
{
koste<<NA::varId << ' n';
koste<<NB::varId << ' n';

komme tilbake 0;
}

Utgangen er som følger:



5
2.3

Det er to navnerom i programmet ovenfor: NA , som har definisjonen av et heltall, og NB , som har definisjonen av en flottør, men med samme navn som heltallet for NA. Til slutt, da programmet ble kjørt, ble det samme navnet for to forskjellige variabler brukt. Vær oppmerksom på at for å få tilgang til det samme navnet på to forskjellige variabler, må det spesielle navnet på navneområdet brukes, etterfulgt av den vanlige identifikatoren. Navneplassnavnet og den vanlige identifikatoren skilles av operatøren for omfangsoppløsning, :: . Navnet på navnerommene vil differensiere objektene.





Denne artikkelen dekker det grunnleggende konseptet med et navneområde og bruken av det i programmeringsspråket C ++. For å følge denne artikkelen bør du ha grunnleggende kunnskap om språket C ++. Du bør også ha kunnskap om C ++ - omfanget, selv om det er kort forklart i denne artikkelen. Hvis du vil vite mer om C ++ - omfang, søker du etter uttrykket, Omfang i C ++ (uten anførselstegn) i søkeboksen på en linuxhint.com -webside og trykker Enter. Dette vil lede deg til artikkelen denne forfatteren skrev.

Artikkelinnhold

Hva er et navneområde?

En deklarativ region er den største delen av et program der navnet på en enhet (variabel) er gyldig. Denne regionen kalles et omfang. Et navneområde i C ++ er et generalisert omfang hvis hovedformål er å løse navnekonflikter. Et navneområde har grunnleggende deklarasjoner og/eller definisjoner av enheter.



Globalt navnerom og dets problem

Det globale navnerommet er det globale omfanget. Vurder følgende korte program:

#inkludere
ved hjelp av navneområde std;

intident= 55;
flyteident= 12.17;

inthoved-()
{

komme tilbake 0;
}

I programmet ovenfor er det to variabler, begge kalt ident . Disse variablene er i det globale omfanget; det vil si at de er i det globale navneområdet. Et forsøk på å kompilere dette programmet vil mislykkes med en feilmelding. Det globale omfanget godtar ikke mer enn én variabel med samme navn, så det er behov for et tilpasset navnerom.

Egendefinert navneplass

Et navneområde har ikke bare ett navn. I stedet har et navneområde et sett med navn for å unngå konflikt med andre sett med navn. For å unngå konflikt lavere i koden, gå foran hvert navn med navnet på navneområdet og :: . Følgende program illustrerer dette ved å bruke to egendefinerte navnerom:

#inkludere
ved hjelp av navneområde std;

navnerom NA
{
intvarInt= 6;
flyteflt;
}

navneplass NB
{
intvarInt= 7;
flyteflt;
}

inthoved-()
{
koste<<NA::varInt << ' n';
koste<<NB::varInt << ' n';
NA::flt = 2.5;
NB::flt = 4.8;
koste<<NA::flt << ' n';
koste<<NB::flt << ' n';

komme tilbake 0;
}

Utgangen er:

6
7
2.5
4.8

Vær oppmerksom på at navnene NA :: flt og NB :: flt til slutt har blitt definert i hoved() funksjon. C ++ tillater ikke en slik definisjon i det globale omfanget.

Vær oppmerksom på at det egendefinerte navnerommet er et nestet navnerom for det globale navnområdet.

Bruksdirektivet

For å unngå å skrive navneplass :: navn hele tiden i stedet for bare navn etter å ha erklært navneområdet, kan du bruke ved hjelp av direktiv. Syntaksen for å bruke ved hjelp av direktivet er som følger:

ved å bruke navneområde Navneplassnavn;

De ved hjelp av direktiv er ikke et forhåndsbehandlingsdirektiv, så det ender med et semikolon (;).

Følgende program illustrerer bruken av ved hjelp av direktiv og mer:

#inkludere
ved hjelp av navneområde std;

navneplass NB
{
intvarInt= 7;
intfunksjon()
{
komme tilbakevarInt;
}
}

intfn()
{
ved hjelp av navneplass NB;
intmyVar2=funksjon();
// andre objekter og funksjoner fra NB følger.
komme tilbakemyVar2;
}

intmyVar3=NB::funksjon();

inthoved-()
{
koste<<fn() << '' <<myVar3<< ' n';

komme tilbake 0;
}

Utgangen av dette programmet er 7 7 . Begrepet bruker navnerom NB; har blitt plassert i begynnelsen av fn () definisjon. De func () fra NB -navneområdet kalles like under det, uten å gå foran med NB :: .

En variabel som er deklarert i det globale omfanget (globalt navnerom) sees fra deklarasjonspunktet til slutten av filen. Det sees også i de nestede navnerommene (nestede omfang), for eksempel de nestede fn () funksjonsomfang ovenfor. De ved hjelp av direktivet slutter seg til navnerommet fra posisjonen det er plassert til slutten av omfanget det er plassert i.

Navnet func () fra NB -navneområdet kan ikke sees under fn () definisjon fordi bruker navnerom NB; ble plassert innenfor funksjonsomfanget (blokk). Under denne betingelsen, å bruke func () utenfor NB -navneområdet (omfanget) må den gå foran NB :: , som i følgende uttalelse:

intmyVar3=NB::funksjon();

De ved hjelp av direktivet forbinder sitt navnerom med det ytre hekkende navnerommet fra posisjonen det er plassert til slutten av det ytre hekkende navnerommet. I det følgende programmet er NA -navnerommet knyttet til det globale navnerommet. Begge navnerommene strekker seg deretter inn i fn () funksjonsdefinisjon navnerom, der de er forbundet med NB -navneområdet. NB -navneområdet slutter på slutten av fn () funksjonsdefinisjon, og de to tidligere navnerommene fortsetter til slutten av filen (les gjennom koden).

#inkludere
ved hjelp av navneområde std;

navnerom NA
{
intvarInt= 6;
intfunksjon()
{
komme tilbakevarInt;
}

}

navneplass NB
{
intvarInt= 7;
intfunksjon()
{
komme tilbakevarInt;
}
}

bruker navnerom NA;
intmyVar0=varInt;
// andre objekter og funksjoner fra :: og NB følger.

intfn()
{
intmyVar1=varInt;
ved hjelp av navneplass NB;
intmyVar2=NB::funksjon();
// andre objekter og funksjoner fra NB følger, til slutten av dette omfanget.
komme tilbakemyVar1+myVar2;
}

// Bare objekter og funksjoner fra :: og NB følger.

intmyVar3=NB::funksjon();

inthoved-()
{
koste<<myVar0<< '' <<fn() << '' <<myVar3<< ' n';

komme tilbake 0;
}

Utgangen er 6, 13, 7 .

Merk: Det globale navnerommet er angitt med :: , noe som betyr at det ikke er noe før omfangsoppløsningsoperatøren som følger.

Under uttalelsen står bruker navnerom NA; variabler fra det globale og NA -navnerommet kan brukes uten angivelse av kildenavnsområdet. Den neste uttalelsen bruker varInt av NA -navneområdet. Den globale og NA -kombinerte navneområdet strekker seg inn i fn () funksjonsnavnområde. Så varInt av den første uttalelsen i fn () funksjonsomfang, er av NA -navneområdet.

Siden regionen for de globale og NA -navnerommene strekker seg over hele fn () omfang, etter int myVar2 = NB :: func (); , ethvert navn fra NB -navneområdet kan bare brukes i fn () omfang uten å gå foran det med NB :: , bare hvis det ikke forekom i NA og globale navnerom (blokker). Ellers bør det gå foran NB :: . Regionen for de kombinerte navnerommene for NA og global fortsetter under fn () definisjon og inn i hoved() funksjonen til slutten av filen.

Utvidelsen av NB -navneområdet starter fra int myVar2 = NB :: func (); i fn () blokk og slutter på slutten av fn () definisjonsblokk.

Merk: Navnerom hvis regioner er forbundet, bør ikke ha samme variabelnavn i de forskjellige navneområdeblokkene, da dette fortsatt vil forårsake konflikt.

Navneområder

Et navneområde er et omfang. Bortsett fra det globale navnerommet (globalt omfang), bør ethvert navneområde deklareres i en blokk. Denne blokken er den første delen av de muligens distribuerte områdene i navneområdet. Med bruksdirektivet kan navneområdet utvides som regioner i andre omfang.

Det sies at enheter som er deklarert i et navneområde, er medlemmer av navneområdet, og navn som innføres med disse erklæringene i den deklarative regionen i navneområdet sies å være medlemsnavn i navneområdet.

Nested Namespace

Følgende program viser nestede navneplasser:

#inkludere
ved hjelp av navneområde std;

navneområde A
{
intJeg= 1;
navneområde B
{
intJeg= 2;
navneområde C
{
intJeg= 3;
}
}
}

inthoved-()
{
koste<<TIL::Jeg << '' <<TIL::B::Jeg << '' <<TIL::B::C::Jeg << ' n';

komme tilbake 0;
}

Utgangen er:

1 2 3

Legg merke til at de tre verdiene er tilgjengelig med operatøren for omfangsoppløsning.

Standard navnerom

C ++ har et bibliotek som kalles standardbiblioteket. Navnene på objekter, funksjoner og andre enheter i dette biblioteket er fra et navneområde som kalles standardnavnområdet, skrevet som timer . Standardbiblioteket inneholder underbiblioteker, og et av disse underbibliotekene er iostream . De iostream biblioteket inneholder objektet koste , som brukes til å sende resultater til konsollen (terminal).

Navnet koste må være i timer navneområde. Å bruke iostream med dens timer navneplass, bør programmet være som følger:

#inkludere
ved hjelp av navneområde std;

Legg merke til bruken av ved hjelp av direktiv og timer . Begrepet #inkludere er et forhåndsbehandlingsdirektiv og slutter ikke med et semikolon. Den inkluderer iostream -filen i posisjonen til direktivet.

Konklusjon

Et navneområde er et omfang. Navneplassbeskrivelsen (definisjonen) inneholder grunnleggende deklarasjoner og/eller definisjoner av C ++ - objekter, funksjoner og andre enheter. Utenfor definisjonen av navneområdet kan du få tilgang til navnet med syntaksen, namespaceName :: navn . Bortsett fra det globale navnerommet (globalt omfang), bør ethvert navneområde deklareres i en blokk. Denne blokken er den første delen av de muligens distribuerte områdene i navneområdet. Med ved hjelp av direktivet, kan navneområdet utvides som regioner i andre omfang. Navnerom hvis regioner er forbundet, bør ikke ha samme variabelnavn i de forskjellige navneområdeblokkene, da dette fortsatt vil føre til navnekonflikter.

Chrys