C ++

C ++ nimeruum

C ++ nimeruum
Nimeruum C ++ keeles on üldistatud ulatus. Selle deklaratsioon algab reserveeritud sõnaga nimeruum, millele järgneb programmeerija valitud nimi ja seejärel sulgudes olev lause. Plokk sisaldab põhideklaratsioone ja / või C ++ objektide, funktsioonide ja muude üksuste määratlusi.

Mõelge järgmisele kahele skalaarsele avaldusele globaalses ulatuses:

# kaasata
nimeruumi kasutamine std;
int varId = 5;
ujuk varId = 2.3;
int main ()

tagastama 0;

Selle programmi kompileerimise katse viib kompileerimisveani. Sama nimega muutujaid on kaks, varId. Kuigi need on kaks erinevat muutujat, mis on kahte tüüpi, int ja ujuk, kompilaator lükkab need kaks deklaratsiooni tagasi, kuna need on sama nimega. Järgmine programm lahendab selle probleemi, deklareerides sama nimega muutujad kahes erinevas üldistatud reguleerimisalas:

# kaasata
nimeruumi kasutamine std;
nimeruum NA

int varId = 5;

nimeruum NB

ujuk varId = 2.3;

int main ()

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

Väljund on järgmine:

5
2.3

Ülaltoodud programmis on kaks nimeruumi: NA, millel on täisarvu määratlus ja NB, millel on ujuki määratlus, kuid sama nimega kui NA täisarv. Lõpuks, kui programm käivitati, kasutati sama nime kahele erinevale muutujale. Pange tähele, et kahe erineva muutuja samale nimele juurde pääsemiseks tuleb kasutada nimeruumi konkreetset nime, millele järgneb ühine identifikaator. Nimeruumi nimi ja ühine identifikaator on eraldatud ulatuse eraldamise operaatoriga “::.”Nimeruumide nimed eristavad objekte.

See artikkel käsitleb nimeruumi põhimõistet ja selle kasutamist programmeerimiskeeles C ++. Selle artikli järgimiseks peaksite omama algteadmisi C ++ keelest. Samuti peaksite teadma C ++ ulatust, kuigi seda on selles artiklis lühidalt selgitatud. C ++ ulatuse kohta lisateabe saamiseks otsige mis tahes linuxhinti otsingukastist fraasi „Reguleerimisala C ++ -s” (jutumärkideta).com veebileht ja vajutage sisestusklahvi. See viib teid artikli juurde, mille see autor kirjutas.

Artikli sisu

Mis on nimeruum?

Deklaratiivne piirkond on programmi suurim osa, milles kehtib üksuse (muutuja) nimi. Seda piirkonda nimetatakse ulatuseks. Nimeruum C ++ keeles on üldistatud ulatus, mille peamine eesmärk on nimekonfliktide lahendamine. Nimeruumis on põhideklaratsioonid ja / või üksuste definitsioonid.

Ülemaailmne nimeruum ja selle probleem

Globaalne nimeruum on globaalne ulatus. Mõelge järgmisele lühiprogrammile:

# kaasata
nimeruumi kasutamine std;
int ident = 55;
ujuki tunnus = 12.17;
int main ()

tagastama 0;

Ülaltoodud programmis on kaks muutujat, mida mõlemat nimetatakse ident. Need muutujad on globaalses ulatuses; see tähendab, et nad asuvad globaalses nimeruumis. Selle programmi kompileerimise katse ebaõnnestub tõrketeatega. Globaalne ulatus ei aktsepteeri rohkem kui ühte samanimelist muutujat, seega on vaja kohandatud nimeruumi.

Kohandatud nimeruum

Nimeruumil pole ainult ühte nime. Selle asemel on nimeruumis nimede komplekt, et vältida konflikte teiste nimedega. Koodis madalamate konfliktide vältimiseks sisestage igale nimele nimeruumi nimi ja :: . Järgmine programm illustreerib seda kahe kohandatud nimeruumi abil:

# kaasata
nimeruumi kasutamine std;
nimeruum NA

int varInt = 6;
ujuk flt;

nimeruum NB

int varInt = 7;
ujuk 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';
tagastama 0;

Väljund on:

6
7
2.5
4.8

Pange tähele, et nimed NA :: flt ja NB :: flt on lõppkokkuvõttes määratletud peamine () funktsioon. C ++ ei võimalda sellist määratlust globaalses ulatuses.

Pange tähele, et kohandatud nimeruum on globaalse nimeruumi pesastatud nimeruum.

Kasutamise direktiiv

Et pärast nimeruumi deklareerimist ei kirjutataks kogu aeg „namepace :: name”, mitte lihtsalt „name”, võite kasutada kasutades direktiiv. Süntaks, mida kasutatakse kasutades direktiiv on järgmine:

nimeruumi kasutamine Nimespace_name;

The kasutades direktiiv ei ole eeltöötleja direktiiv, seega lõpeb see semikooloniga (;).

Järgmine programm illustreerib programmi kasutamist kasutades direktiiv ja muu:

# kaasata
nimeruumi kasutamine std;
nimeruum NB

int varInt = 7;
int func ()

return varInt;


int fn ()

nimeruumi kasutamine NB;
int myVar2 = func ();
// järgnevad muud NB-i objektid ja funktsioonid.
tagastage myVar2;

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

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

Selle programmi väljund on 7 7. Mõiste “nimeruumi kasutamine NB;”On paigutatud algusesse fn () määratlus. The func () NB-nimelisest ruumist nimetatakse selle alla, ilmaNB ::.”

Globaalses ulatuses deklareeritud muutujat (globaalne nimeruum) vaadeldakse deklaratsiooni punktist faili lõpuni. Seda nähakse ka pesastatud nimeruumides (sisestatud ulatus), näiteks pesastatud fn () ülaltoodud funktsiooni ulatus. The kasutades direktiiv liitub oma nimeruumiga alates positsioonist, kuhu see asetatakse, selle sfääri lõpuni, kuhu see on paigutatud.

Nimi func () NB nimeruumist ei saa näha allpool fn () määratlus, sestkasutades nimeruumi NB; " paigutati funktsiooni ulatusse (plokk). Selle tingimuse korralfunc ()"Väljaspool NB-nimeruumi plokki (ulatus) peab selle ette tulema"NB ::,”Nagu järgmises avalduses:

int myVar3 = NB :: func ();

The kasutades direktiiv ühendab oma nimeruumi välise pesitseva nimeruumiga alates paigutusest kuni välise pesitseva nimeruumi lõpuni. Järgmises programmis on NA nimeruum ühendatud globaalse nimeruumiga. Mõlemad nimeruumid laienevad seejärel fn () funktsiooni määratlus nimeruum, milles nad on ühendatud NB nimeruumiga. NB nimeruum lõpeb fn () funktsiooni määratlus ja kaks eelmist nimeruumi jätkuvad faili lõpuni (loe kood läbi).

# kaasata
nimeruumi kasutamine std;
nimeruum NA

int varInt = 6;
int func ()

return varInt;


nimeruum NB

int varInt = 7;
int func ()

return varInt;


nimeruumi NA abil;
int myVar0 = varInt;
// järgnevad muud :: ja NB objektid ja funktsioonid.
int fn ()

int myVar1 = varInt;
nimeruumi kasutamine NB;
int myVar2 = NB :: func ();
// järgnevad muud objektid ja funktsioonid NB-st kuni selle ulatuse lõpuni.
tagastage myVar1 + myVar2;

// Järgnevad ainult objektid ja funktsioonid punktidest :: ja NB.
int myVar3 = NB :: func ();
int main ()

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

Väljund on 6, 13, 7.

Märge: Ülemaailmset nimeruumi tähistatakse tähisega :: , mis tähendab, et enne ulatuse lahendamise operaatorit pole midagi järgnevat.

Avalduse all kuvataksenimeruumi NA abil;”Globaalse ja NA nimeruumi muutujaid saab kasutada nende lähte nimeruumi märkimata. Järgmises avalduses kasutatakse varInt NA nimeruumi. Ülemaailmne ja NA kombineeritud nimeruumi piirkond ulatub fn () funktsiooni nimeruum. Seega varInt esimese avalduse fn () funktsiooni ulatus, kuulub NA nimeruumi.

Kuna globaalse ja NA nimeruumide piirkond laieneb kogu fn () reguleerimisala, pärastint myVar2 = NB :: func ();,"Mis tahes NB-nimeruumi nime saab kasutada ainult fn () reguleerimisala ilma eelneva sõnagaNB ::,”Ainult siis, kui seda ei esine NA-s ja globaalsetes nimeruumides (plokkides). Vastasel juhul peaks sellele eelnema “NB ::.NA ja globaalsete nimeruumide piirkond jätkub allpool fn () määratlus ja peamine () kuni faili lõpuni.

NB-nimeruumi laiendus algabint myVar2 = NB :: func ();fn () plokk ja lõpeb fn () määratlusplokk.

Märge: Nimeruumidel, mille piirkonnad on ühendatud, ei tohiks olla erinevates nimeruumiplokkides sama muutuja nimi, kuna see põhjustaks ikkagi konflikti.

Nimeruumi piirkonnad

Nimeruum on ulatus. Lisaks globaalsele nimeruumile (globaalne ulatus) tuleks kõik nimeruumid deklareerida plokis. See plokk on nimeruumi võimalike jaotatud piirkondade esimene osa. Kasutatava direktiivi abil saab nimeruumi laiendada piirkondadena teistes valdkondades.

Nimetusruumi kehas deklareeritud üksused on väidetavalt nimeruumi liikmed ja nende deklaratsioonidega nimeruumi deklaratiivsesse piirkonda sisse viidud nimed on nimeruumi liikmete nimed.

Pesastatud nimeruumid

Järgmine programm näitab pesastatud nimeruume:

# kaasata
nimeruumi kasutamine std;
nimeruum A

int i = 1;
nimeruum B

int i = 2;
nimeruum C

int i = 3;



int main ()

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

Väljund on:

1 2 3

Pange tähele, et kolmele väärtusele on juurdepääs ulatusrežiimi operaatori abil.

Standardne nimeruum

C ++ - l on raamatukogu, mida nimetatakse standardraamatukoguks. Selle teegi objektide, funktsioonide ja muude üksuste nimed pärinevad nimeruumist, mida nimetatakse standardseks nimeruumiks ja mis on kirjutatud järgmiselt standard. Standardne teek sisaldab alamraamatukogusid ja üks neist alamraamatukogudest on iostream. The iostream teek sisaldab objekti cout, mida kasutatakse tulemuste saatmiseks konsooli (terminali).

Nimi cout peab olema standard nimeruum. Kasutada iostream koos sellega standard nimeruumi, peaks programm olema järgmine:

# kaasata
nimeruumi kasutamine std;

Pange tähele kasutades direktiiv ja standard. Mõiste “# kaasata ”On eelprotsessorite direktiiv ja ei lõpe semikooloniga. See sisaldab iostreami „faili” oma direktiivi asukohas.

Järeldus

Nimeruum on ulatus. Nimeruumi kirjeldus (määratlus) sisaldab põhideklaratsioone ja / või C ++ objektide, funktsioonide ja muude üksuste määratlusi. Väljaspool nimeruumi määratlust pääseb sellele nimele juurde süntaksiga “namespaceName :: nimi.”Lisaks globaalsele nimeruumile (globaalne ulatus) tuleks kõik nimeruumid deklareerida plokis. See plokk on nimeruumi võimalike jaotatud piirkondade esimene osa. Koos kasutades direktiivis saab nimeruumi laiendada teiste valdkondade piirkondadena. Nimeruumidel, mille piirkonnad on ühendatud, ei tohiks olla erinevates nimeruumiplokkides sama muutuja nimi, kuna see põhjustaks ikkagi nimede konflikti.

Chrys

Hiire keskmine nupp ei tööta Windows 10-s
The hiire keskmine nupp aitab teil sirvida pikki rohke andmega veebisaite ja ekraane. Kui see peatub, siis lõpuks kasutate kerimiseks klaviatuuri, mis...
Kuidas muuta hiire vasakut ja paremat nuppu Windows 10 PC-s
On üsna tavaline, et kõik arvutihiirte seadmed on ergonoomiliselt mõeldud parempoolsete kasutajate jaoks. Kuid on olemas hiire seadmeid, mis on spetsi...
Jäljendage hiireklikke, hõljutades hiirega klõpsutut hiirt Windows 10-s
Hiire või klaviatuuri kasutamine liigses kasutamises vales asendis võib põhjustada palju terviseprobleeme, sealhulgas tüve, karpaalkanali sündroom ja ...