C ++

C ++ Navneområde

C ++ Navneområde
Et navneområde i C ++ er et generaliseret omfang. Dens erklæring begynder med det reserverede ord, navneområde efterfulgt af et navn efter programmørens valg og derefter blokken i parentes. Blokken indeholder grundlæggende erklæringer og / eller definitioner af C ++ - objekter, funktioner og andre enheder.

Overvej følgende to skalære udsagn i et globalt omfang i følgende program:

#omfatte
ved hjælp af namespace std;
int varId = 5;
float varId = 2.3;
int main ()

returnere 0;

Et forsøg på at kompilere dette program fører til en kompileringsfejl. Der er to variabler med samme navn, varId. Selvom de er to forskellige variabler af to forskellige typer, int og flyde, kompilatoren afviser de to erklæringer, fordi de har samme navn. Følgende program løser dette problem ved at erklære variablerne med samme navn i to forskellige generaliserede omfang:

#omfatte
ved hjælp af namespace std;
navneområde NA

int varId = 5;

navneområde NB

float varId = 2.3;

int main ()

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

Outputtet er som følger:

5
2.3

Der er to navneområder i ovenstående program: NA, som har definitionen på et heltal, og NB, som har definitionen af ​​en float, men med samme navn som heltal for NA. Endelig, da programmet blev kørt, blev det samme navn for to forskellige variabler brugt. Bemærk, at for at få adgang til det samme navn på to forskellige variabler skal det særlige navn til navneområdet bruges efterfulgt af den fælles identifikator. Navneområdets navn og den fælles identifikator adskilles af operatøren for omfangsopløsning, “::.”Navnet på navneområdet vil differentiere objekterne.

Denne artikel dækker det grundlæggende koncept for et navneområde og dets anvendelse på C ++ programmeringssprog. For at følge denne artikel skal du have en grundlæggende viden om C ++ - sproget. Du skal også have kendskab til C ++ - omfanget, selvom det kort forklares i denne artikel. Hvis du vil lære mere om C ++ - omfang, skal du søge efter sætningen "Omfang i C ++" (uden anførselstegn) i søgefeltet i ethvert linuxhint.com-webside, og tryk på Enter. Dette fører dig til den artikel, som denne forfatter skrev.

Artikelindhold

Hvad er et navneområde?

En erklærende region er den største del af et program, hvor navnet på en enhed (variabel) er gyldig. Denne region kaldes et omfang. Et navneområde i C ++ er et generaliseret omfang, hvis hovedformål er at løse navnekonflikter. Et navneområde har grundlæggende erklæringer og / eller definitioner af enheder.

Globalt navneområde og dets problem

Det globale navneområde er det globale anvendelsesområde. Overvej følgende korte program:

#omfatte
ved hjælp af namespace std;
int ident = 55;
float ident = 12.17;
int main ()

returnere 0;

I ovenstående program er der to variabler, begge kaldet ident. Disse variabler er inden for det globale omfang; de er i det globale navneområde. Et forsøg på at kompilere dette program mislykkes med en fejlmeddelelse. Det globale omfang accepterer ikke mere end en variabel med samme navn, så der er behov for et brugerdefineret navneområde.

Brugerdefineret navneområde

Et navneområde har ikke kun ét navn. I stedet har et navneområde et sæt navne for at undgå konflikt med andre sæt navne. For at undgå konflikt lavere i koden skal du foran hvert navn med navnet på navneområdet og :: . Følgende program illustrerer dette ved hjælp af to brugerdefinerede navneområder:

#omfatte
ved hjælp af namespace std;
navneområde NA

int varInt = 6;
flyde flt;

navneområde NB

int varInt = 7;
flyde 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';
returnere 0;

Outputtet er:

6
7
2.5
4.8

Bemærk, at navnene NA :: flt og NB :: flt er i sidste ende blevet defineret i hoved () fungere. C ++ tillader ikke en sådan definition i det globale omfang.

Bemærk, at det tilpassede navneområde er et indlejret navneområde for det globale navneområde.

Brugsdirektivet

For at undgå at skrive “namepace :: name” hele tiden i stedet for bare “name” efter at have erklæret navneområdet, kan du bruge ved brug af direktiv. Syntaksen for at bruge ved brug af direktivet er som følger:

ved hjælp af navneområde Navneområde_navn;

Det ved brug af direktivet er ikke et forprocessordirektiv, så det ender med et semikolon (;).

Det følgende program illustrerer brugen af ved brug af direktiv og mere:

#omfatte
ved hjælp af namespace std;
navneområde NB

int varInt = 7;
int func ()

returvariant;


int fn ()

ved hjælp af navneområde NB;
int myVar2 = func ();
// andre objekter og funktioner fra NB følger.
returner myVar2;

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

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

Resultatet af dette program er 7 7. Begrebet "ved hjælp af navneområde NB;”Er placeret i begyndelsen af fn () definition. Det func () fra NB-navneområdet kaldes lige under det uden at gå forud for “NB ::.”

En variabel, der er erklæret i det globale omfang (globalt navneområde), ses fra erklæringspunktet til slutningen af ​​filen. Det ses også i de indlejrede navneområder (indlejrede rækkevidde), såsom det indlejrede fn () funktionsomfang ovenfor. Det ved brug af direktivet forbinder sit navneområde fra den position, hvor det er placeret, til slutningen af ​​det anvendelsesområde, hvor det er placeret.

Navnet func () fra NB-navneområdet kan ikke ses under fn () definition fordi “ved hjælp af navneområde NB; ” blev placeret inden for funktionsomfanget (blok). Under denne betingelse, at bruge “func ()”Uden for NB-navneområdeblokken (scope) skal den være forud for“NB ::,”Som i følgende erklæring:

int myVar3 = NB :: func ();

Det ved brug af direktivet forbinder sit navneområde med det ydre indlejrede navneområde fra den position, hvor det er placeret, til slutningen af ​​det ydre indlejrede navneområde. I det følgende program er NA-navneområdet forbundet med det globale navneområde. Begge navneområder strækker sig derefter ind i fn () funktionsdefinition navneområde, hvor de er forbundet med NB navneområdet. NB-navneområdet slutter i slutningen af fn () funktionsdefinition og de to foregående navneområder fortsætter indtil slutningen af ​​filen (læs gennem koden).

#omfatte
ved hjælp af namespace std;
navneområde NA

int varInt = 6;
int func ()

returvariant;


navneområde NB

int varInt = 7;
int func ()

returvariant;


ved hjælp af navneområde NA;
int myVar0 = varInt;
// andre objekter og funktioner fra :: og NB følger.
int fn ()

int myVar1 = varInt;
ved hjælp af navneområde NB;
int myVar2 = NB :: func ();
// andre objekter og funktioner fra NB følger, indtil slutningen af ​​dette omfang.
returner myVar1 + myVar2;

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

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

Outputtet er 6, 13, 7.

Bemærk: Det globale navneområde er angivet med :: , hvilket betyder, at der ikke er noget før omfangsopløsningsoperatoren, der følger.

Under udsagnet står “ved hjælp af navneområde NA;”Variabler fra det globale og NA navneområde kan bruges uden angivelse af deres kilde navneområde. Den næste erklæring bruger varInt af NA-navneområdet. Den globale og NA kombinerede navneområdet strækker sig ind i fn () funktionsnavne. Så varInt af den første erklæring i fn () funktionsomfang er af NA-navneområdet.

Da regionen for det globale og NA navneområde strækker sig overalt i fn () rækkevidde efter "int myVar2 = NB :: func ();,”Ethvert navn fra NB-navneområdet kan kun bruges i fn () uden at gå forud for det med “NB ::,”Kun hvis det ikke fandt sted i NA og globale navneområder (blokke). Ellers skal det forud for "NB ::.”Regionen af ​​de kombinerede navneområder for NA og global fortsætter under fn () definition og ind i hoved () funktion indtil slutningen af ​​filen.

Udvidelsen af ​​NB-navneområdet begynder med “int myVar2 = NB :: func ();”I fn () blokere og slutter i slutningen af fn () definitionsblok.

Bemærk: Navneområder, hvis regioner er tilsluttet, bør ikke have det samme variabelnavn i deres forskellige navneområdeblokke, da dette stadig vil forårsage konflikt.

Navneområde-regioner

Et navneområde er et omfang. Bortset fra det globale navneområde (globalt omfang) skal ethvert navneområde erklæres i en blok. Denne blok er den første del af de muligvis distribuerede regioner i navneområdet. Med det anvendte direktiv kan navneområdet udvides som regioner i andre anvendelsesområder.

Enheder, der er erklæret i et navneområde, siges at være medlemmer af navneområdet, og navne, der er introduceret ved disse erklæringer i den erklærende region i navneområdet, siges at være medlemsnavne i navnområdet.

Indlejrede navneområder

Følgende program viser indlejrede navneområder:

#omfatte
ved hjælp af namespace std;
navneområde A

int i = 1;
navneområde B

int i = 2;
navneområde C

int i = 3;



int main ()

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

Outputtet er:

1 2 3

Bemærk, at der er adgang til de tre værdier ved hjælp af operatøren for omfangsopløsning.

Standard navneområde

C ++ har et bibliotek kaldet standardbiblioteket. Navnene på objekter, funktioner og andre enheder i dette bibliotek er fra et navneområde kaldet standardnavneområdet, skrevet som std. Standardbiblioteket indeholder underbiblioteker, og et af disse underbiblioteker er iostream. Det iostream biblioteket indeholder objektet cout, som bruges til at sende resultater til konsollen (terminal).

Navnet cout skal være i std navneområde. At bruge iostream med sin std navneområde, skal programmet være som følger:

#omfatte
ved hjælp af namespace std;

Bemærk brugen af ved brug af direktiv og std. Begrebet "#omfatte ”Er et forprocessordirektiv og slutter ikke med semikolon. Det inkluderer iostream "filen" i placeringen af ​​direktivet.

Konklusion

Et navneområde er et omfang. Navneområdebeskrivelsen (definition) indeholder grundlæggende erklæringer og / eller definitioner af C ++ - objekter, funktioner og andre enheder. Uden for definitionen af ​​navneområdet kan man få adgang til navnet med syntaksen, "namespaceName :: navn.”Bortset fra det globale navneområde (globalt omfang), bør ethvert navneområde deklareres i en blok. Denne blok er den første del af de muligvis distribuerede regioner i navneområdet. Med ved brug af I direktivet kan navneområdet udvides som regioner i andre anvendelsesområder. Navneområder, hvis regioner er tilsluttet, bør ikke have det samme variabelnavn i deres forskellige navneområdeblokke, da dette stadig vil forårsage navnekonflikt.

Chrys

Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...
Bedste Linux Distros til spil i 2021
Linux-operativsystemet er kommet langt fra dets originale, enkle, serverbaserede udseende. Dette operativsystem er forbedret enormt i de senere år og ...
Sådan registreres og streames din gaming-session på Linux
Tidligere blev spil kun betragtet som en hobby, men med tiden oplevede spilindustrien en enorm vækst med hensyn til teknologi og antallet af spillere....