C ++

C ++ Navneområde

C ++ Navneområde
Et navneområde i C ++ er et generalisert omfang. Erklæringen begynner med det reserverte ordet, navneområdet, etterfulgt av et navn som programmereren velger, og deretter blokken i parentes. Blokken inneholder grunnleggende erklæringer og / eller definisjoner av C ++ - objekter, funksjoner og andre enheter.

Vurder følgende to skalære uttalelser i et globalt omfang, i følgende program:

#inkludere
bruker navneområde std;
int varId = 5;
float varId = 2.3;
int main ()

retur 0;

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

#inkludere
bruker navneområde std;
navnerom NA

int varId = 5;

navneområde NB

float varId = 2.3;

int main ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
retur 0;

Resultatet er som følger:

5
2.3

Det er to navnerom i programmet ovenfor: NA, som har definisjonen av et helt tall, 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 på to forskjellige variabler brukt. Merk at for å få tilgang til samme navn på to forskjellige variabler, må det spesielle navnet for navneområdet brukes, etterfulgt av den felles identifikatoren. Navneplassnavnet og den vanlige identifikatoren er skilt av operatøren for omfangsoppløsning, “::.”Navnet på navneområdene vil skille mellom objektene.

Denne artikkelen dekker det grunnleggende konseptet med et navneområde og dets bruk på C ++ programmeringsspråk. For å følge denne artikkelen, bør du ha grunnleggende kunnskaper om C ++ - språket. Du bør også ha kunnskap om C ++ - omfanget, selv om det er kort forklart i denne artikkelen. Hvis du vil lære mer om C ++ -omfang, kan du søke etter uttrykket "Omfang i C ++" (uten anførselstegn) i søkefeltet i en hvilken som helst linuxhint.com-nettsiden og trykk Enter. Dette vil føre deg til artikkelen denne forfatteren skrev.

Artikkelinnhold

Hva er et navneområde?

En erklærende 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 som har som hovedformål å løse navnekonflikter. Et navneområde har grunnleggende erklæringer og / eller definisjoner av enheter.

Globalt navneområde og dets problem

Det globale navneområdet er det globale omfanget. Tenk på følgende korte program:

#inkludere
bruker navneområde std;
int ident = 55;
float ident = 12.17;
int main ()

retur 0;

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

Tilpasset navneområde

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

#inkludere
bruker navneområde std;
navnerom NA

int varInt = 6;
flyte flt;

navneområde NB

int varInt = 7;
flyte 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';
retur 0;

Utgangen er:

6
7
2.5
4.8

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

Merk at det egendefinerte navneområdet er et nestet navneområde for det globale navneområdet.

Bruksdirektivet

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

ved å bruke navneområde Navneområde_navn;

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

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

#inkludere
bruker navneområde std;
navneområde NB

int varInt = 7;
int func ()

retur varInt;


int fn ()

bruk av navneområde NB;
int myVar2 = func ();
// andre objekter og funksjoner fra NB følger.
returner myVar2;

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

cout << fn() << " << myVar3 << '\n';
retur 0;

Resultatet av dette programmet er 7 7. Begrepet “bruk av navneområde NB;”Er plassert i begynnelsen av fn () definisjon. De func () fra NB-navneområdet kalles rett under det, uten å gå foran med “NB ::.”

En variabel som er erklært i det globale omfanget (globalt navneområde) ses fra erklæringspunktet til slutten av filen. Det sees også i de nestede navneområdene (nestede omfang), slik som det nestede fn () funksjonsomfang ovenfor. De ved hjelp av direktivet knytter seg til navneområdet fra posisjonen der det plasseres til slutten av omfanget det er plassert i.

Navnet func () fra NB-navneområdet kan ikke sees under fn () definisjon fordi “bruker navneområdet NB; ” ble plassert innenfor funksjonsomfanget (blokk). Under denne tilstanden, å bruke “func ()”Utenfor NB-navneområdeblokken (omfang), må den være foran“NB ::,”Som i følgende uttalelse:

int myVar3 = NB :: func ();

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

#inkludere
bruker navneområde std;
navnerom NA

int varInt = 6;
int func ()

returvarInt;


navneområde NB

int varInt = 7;
int func ()

returvarInt;


bruker navneområdet NA;
int myVar0 = varInt;
// andre objekter og funksjoner fra :: og NB følger.
int fn ()

int myVar1 = varInt;
bruk av navneområde NB;
int myVar2 = NB :: func ();
// andre objekter og funksjoner fra NB følger, til slutten av dette omfanget.
returner myVar1 + myVar2;

// Bare objekter og funksjoner fra :: og NB følger.
int myVar3 = NB :: func ();
int main ()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
retur 0;

Resultatet er 6, 13, 7.

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

Under uttalelsen, “bruker navneområdet NA;”Variabler fra det globale og NA-navnerommet kan brukes uten en indikasjon på kildens navneområde. Den neste uttalelsen bruker varInt av NA-navneområdet. Den globale og NA kombinerte navneplassområdet strekker seg inn i fn () funksjonens navneområde. Så varInt av den første uttalelsen i fn () funksjonsomfang, er av NA-navneområdet.

Siden regionen for det globale og NA-navnområdet strekker seg over hele fn () omfang, etter “int myVar2 = NB :: func ();,”Ethvert navn fra NB-navneområdet kan bare brukes i fn () uten å gå foran det med “NB ::,”Bare hvis det ikke skjedde i NA og globale navneområder (blokker). Ellers skal det innledes med “NB ::.Regionen av 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 begynner fra “int myVar2 = NB :: func ();”I fn () blokkerer og slutter på slutten av fn () definisjonsblokk.

Merk: Navneområder hvis regioner er sammenføyde, bør ikke ha det samme variabelnavnet i de forskjellige navneområdeblokkene, da dette fortsatt vil føre til konflikt.

Navneplassregioner

Et navneområde er et omfang. Bortsett fra det globale navneområdet (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.

Enheter som er erklært i et navneområde, sies å være medlemmer av navneområdet, og navn som er introdusert av disse erklæringene i den deklarative regionen i navneområdet, sies å være medlemsnavn i navneområdet.

Nestede navneområder

Følgende program viser nestede navneområder:

#inkludere
bruker navneområde std;
navneområde A

int i = 1;
navneområde B

int i = 2;
navnerom C

int i = 3;



int main ()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
retur 0;

Utgangen er:

1 2 3

Legg merke til at du har fått tilgang til de tre verdiene ved hjelp av operatøren for omfangsoppløsning.

Standard navneområde

C ++ har et bibliotek som heter standardbiblioteket. Navnene på objekter, funksjoner og andre enheter i dette biblioteket er fra et navneområde kalt standard navneområde, skrevet som std. Standardbiblioteket inneholder underbiblioteker, og en av disse underbibliotekene er iostream. De iostream biblioteket inneholder objektet cout, som brukes til å sende resultater til konsollen (terminal).

Navnet cout må være i std navneområdet. Å bruke iostream med dens std navnområdet, bør programmet være som følger:

#inkludere
bruker navneområde std;

Legg merke til bruken av ved hjelp av direktivet og std. Begrepet “#inkludere ”Er et forprosessordirektiv og slutter ikke med semikolon. Den inkluderer iostream "filen" i posisjonen til direktivet.

Konklusjon

Et navneområde er et omfang. Navneområdebeskrivelsen (definisjon) inneholder grunnleggende erklæringer og / eller definisjoner av C ++ - objekter, funksjoner og andre enheter. Utenfor navneområdedefinisjonen kan du få tilgang til navnet med syntaksen, "namespaceName :: navn.”Bortsett fra det globale navneområdet (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. Navneområder hvis regioner er sammenføyde, bør ikke ha det samme variabelnavnet i de forskjellige navneområdeblokkene, da dette fortsatt vil føre til navnekonflikt.

Chrys

Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...
Hvordan laste ned og spille Sid Meier's Civilization VI på Linux
Introduksjon til spillet Civilization 6 er et moderne syn på det klassiske konseptet som ble introdusert i serien av Age of Empires-spillene. Ideen va...
Hvordan installere og spille Doom på Linux
Introduksjon til Doom Doom-serien stammer fra 90-tallet etter utgivelsen av den originale Doom. Det ble en øyeblikkelig suksess, og fra den tiden og u...