C ++ nimeruum

C Namespace



C ++ nimeruum on üldistatud ulatus. Selle deklaratsioon algab reserveeritud sõnaga, nimeruumiga, millele järgneb programmeerija valitud nimi ja seejärel sulgudes olev plokk. Plokk sisaldab C ++ objektide, funktsioonide ja muude olemite põhideklaratsioone ja/või definitsioone.

Kaaluge järgmisi kahte skalaarset avaldust globaalses ulatuses järgmises programmis:







#kaasake
kasutades nimeruumi std;

intvarId= 5;
hõljumavarId= 2.3;

intpeamine()
{

tagasi 0;
}

Selle programmi kompileerimise katse toob kaasa kompileerimisvea. On kaks sama nimega muutujat, varId . Kuigi need on kahte erinevat tüüpi muutujad, int ja hõljuma , lükkab koostaja need kaks deklaratsiooni tagasi, kuna need on sama nimega. Järgmine programm lahendab selle probleemi, deklareerides sama nimega muutujad kahes erinevas üldistatud ulatuses:



#kaasake
kasutades nimeruumi std;

nimeruum NA
{
intvarId= 5;
}

nimeruum NB
{
hõljumavarId= 2.3;
}

intpeamine()
{
maksma<<NA::varId << ' n';
maksma<<NB!::varId << ' n';

tagasi 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 nimi kui täisarv NA jaoks. Lõpuks kasutati programmi käivitamisel sama nime kahe erineva muutuja jaoks. Pange tähele, et kahe erineva muutuja sama nime juurde pääsemiseks tuleb kasutada nimeruumi konkreetset nime, millele järgneb ühine identifikaator. Nimeruumi nimi ja ühine identifikaator on eraldatud ulatuse lahendamise operaatoriga, :: . Nimeruumide nimi eristab objekte.





See artikkel hõlmab nimeruumi põhikontseptsiooni ja selle kasutamist C ++ programmeerimiskeeles. Selle artikli järgimiseks peaksid teil olema põhiteadmised C ++ keelest. Teil peaks olema ka teadmisi C ++ ulatusest, kuigi seda on selles artiklis lühidalt selgitatud. C ++ ulatuse kohta lisateabe saamiseks otsige mis tahes linuxhint.com veebilehe otsingukastist fraasi Scope in C ++ (ilma jutumärkideta) ja vajutage sisestusklahvi. See viib teid selle autori kirjutatud artikli juurde.

Artikli sisu

Mis on nimeruum?

Deklaratiivne piirkond on programmi suurim osa, milles üksuse (muutuja) nimi kehtib. Seda piirkonda nimetatakse ulatuseks. C ++ nimeruum on üldistatud ulatus, mille peamine eesmärk on lahendada nimede konfliktid. Nimeruumis on põhideklaratsioonid ja/või olemite definitsioonid.



Globaalne nimeruum ja selle probleem

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

#kaasake
kasutades nimeruumi std;

intident= 55;
hõljumaident= 12.17;

intpeamine()
{

tagasi 0;
}

Ülaltoodud programmis on kaks muutujat, mõlemad nn ident . Need muutujad on globaalses ulatuses; ehk nad on globaalses nimeruumis. Selle programmi kompileerimise katse ebaõnnestub veateatega. Globaalne ulatus ei aktsepteeri rohkem kui ühte sama nimega muutujat, seega on vaja kohandatud nimeruumi.

Kohandatud nimeruum

Nimeruumil pole ainult ühte nime. Selle asemel on nimeruumil nimede komplekt, et vältida vastuolusid teiste nimede kogumitega. Koodi madalamate konfliktide vältimiseks pange iga nime ette nimeruumi nimi ja :: . Järgmine programm illustreerib seda kahe kohandatud nimeruumi abil:

#kaasake
kasutades nimeruumi std;

nimeruum NA
{
intvarieeruv= 6;
hõljumaflt;
}

nimeruum NB
{
intvarieeruv= 7;
hõljumaflt;
}

intpeamine()
{
maksma<<NA::varieeruv << ' n';
maksma<<NB!::varieeruv << ' n';
NA::flt = 2.5;
NB!::flt = 4.8;
maksma<<NA::flt << ' n';
maksma<<NB!::flt << ' n';

tagasi 0;
}

Väljund on:

6
7
2.5
4.8

Pange tähele, et nimed NA :: flt ja NB: flt on lõpuks määratletud peamine () funktsiooni. C ++ ei luba sellist määratlust globaalses ulatuses.

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

Kasutamise direktiiv

Et vältida nimeruumi :: name kogu aeg tippimist, mitte ainult nime asemel pärast nimeruumi deklareerimist, võite kasutada kasutades direktiiviga. Süntaks, mida kasutada kasutades direktiiv on järgmine:

kasutades nimeruumi Namespace_name;

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

Järgmine programm illustreerib selle kasutamist kasutades direktiiv ja palju muud:

#kaasake
kasutades nimeruumi std;

nimeruum NB
{
intvarieeruv= 7;
intfunktsiooni()
{
tagasivarieeruv;
}
}

intfn()
{
kasutades nimeruumi NB;
intmyVar2=funktsiooni();
// järgnevad muud objektid ja funktsioonid NB -st.
tagasimyVar2;
}

intmyVar3=NB!::funktsiooni();

intpeamine()
{
maksma<<fn() << '' <<myVar3<< ' n';

tagasi 0;
}

Selle programmi väljund on 7 7 . Termin kasutades nimeruumi NB; on paigutatud selle algusesse fn () määratlus. The func () NB nimeruumist nimetatakse selle all, ilma eelneva NB: .

Globaalses ulatuses (globaalses nimeruumis) deklareeritud muutuja on näha deklareerimispunktist faili lõpuni. Seda on näha ka pesastatud nimeruumides (pesastatud ulatused), näiteks pesastatud fn () ülaltoodud funktsiooni ulatus. The kasutades direktiiv ühendab oma nimeruumi positsioonist, kuhu see paigutatakse, kuni selle ulatuse lõpuni, kuhu see paigutatakse.

Nimi func () NB nimeruumist ei ole märgi all näha fn () definitsioon, sest kasutades nimeruumi NB; paigutati funktsiooni ulatusse (plokki). Selle tingimuse korral kasutada func () väljaspool NB nimeruumi plokki (ulatust) peab sellele eelnema NB: , nagu järgmises avalduses:

intmyVar3=NB!::funktsiooni();

The kasutades direktiiv ühendab oma nimeruumi välise pesastatud nimeruumiga alates selle paigutamise kohast kuni välise pesastamisruumi lõpuni. Järgmises programmis ühendatakse NA nimeruum globaalse nimeruumiga. Mõlemad nimeruumid ulatuvad seejärel fn () funktsiooni määratluse nimeruumi, milles need 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).

#kaasake
kasutades nimeruumi std;

nimeruum NA
{
intvarieeruv= 6;
intfunktsiooni()
{
tagasivarieeruv;
}

}

nimeruum NB
{
intvarieeruv= 7;
intfunktsiooni()
{
tagasivarieeruv;
}
}

kasutades nimeruumi NA;
intmyVar0=varieeruv;
// järgnevad muud objektid ja funktsioonid :: ja NB -st.

intfn()
{
intmyVar1=varieeruv;
kasutades nimeruumi NB;
intmyVar2=NB!::funktsiooni();
// järgnevad muud objektid ja funktsioonid NB -st kuni selle ulatuse lõpuni.
tagasimyVar1+myVar2;
}

// Järgnevad ainult objektid ja funktsioonid :: ja NB -st.

intmyVar3=NB!::funktsiooni();

intpeamine()
{
maksma<<myVar0<< '' <<fn() << '' <<myVar3<< ' n';

tagasi 0;
}

Väljund on 6, 13, 7 .

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

Avalduse all on kasutades nimeruumi NA; globaalse ja NA nimeruumi muutujaid saab kasutada ilma nende allikaruumi nimetamata. Järgmine avaldus kasutab varieeruv NA nimeruumist. Globaalne ja NA kombineeritud nimeruumi piirkond ulatub fn () funktsiooni nimeruum. Seega varieeruv esimeses avalduses fn () funktsiooni ulatus, on NA nimeruumist.

Kuna globaalsete ja NA nimeruumide piirkond ulatub kogu fn () ulatus, pärast int myVar2 = NB: func (); , mis tahes nime NB -nimeruumist saab kasutada ainult fn () ulatust, ilma et see eelneks NB: , ainult siis, kui seda ei esine NA -s ja globaalsetes nimeruumides (plokkides). Vastasel juhul peaks sellele eelnema NB: . NA ja globaalse kombineeritud nimeruumide piirkond jätkub allpool fn () määratlusesse ja peamine () funktsiooni kuni faili lõpuni.

NB nimeruumi laiendamine algab int myVar2 = NB: func (); aastal fn () plokk ja lõpeb selle lõpus fn () määratlusplokk.

Märge: Nimeruumidel, mille piirkonnad on ühendatud, ei tohiks erinevates nimeruumide plokkides olla sama muutuja nimi, kuna see tekitaks siiski konflikti.

Nimeruumi piirkonnad

Nimeruum on ulatus. Peale globaalse nimeruumi (globaalne ulatus) tuleks kõik nimeruumid deklareerida plokis. See plokk on nimeruumi võimalike hajutatud piirkondade esimene osa. Kasutamisdirektiiviga saab nimeruumi laiendada piirkondadena teistes ulatustes.

Nimeruumi põhiosas deklareeritud üksused on nimeruumi liikmed ja nende deklaratsioonidega nimeruumi deklaratiivsesse piirkonda toodud nimed on nimeruumi liikme nimed.

Pesastatud nimeruumid

Järgmine programm näitab pesastatud nimeruume:

#kaasake
kasutades nimeruumi std;

nimeruum A
{
inti= 1;
nimeruum B.
{
inti= 2;
nimeruum C
{
inti= 3;
}
}
}

intpeamine()
{
maksma<<TO::i << '' <<TO::B::i << '' <<TO::B::C::i << ' n';

tagasi 0;
}

Väljund on:

1 2 3

Pange tähele, et kolmele väärtusele pääseti juurde ulatuse eraldusvõime operaatori abil.

Tavaline nimeruum

C ++ -l on raamatukogu, mida nimetatakse standardraamatukoguks. Selles raamatukogus olevate objektide, funktsioonide ja muude olemite nimed pärinevad nimeruumist, mida nimetatakse standardseks nimeruumiks ja kirjutatud kujul tundi . Tavaline raamatukogu sisaldab alamraamatukogusid ja üks neist alamraamatukogudest on iostream . The iostream raamatukogu sisaldab objekti maksma , mida kasutatakse tulemuste saatmiseks konsoolile (terminalile).

Nimi maksma peab olema tundi nimeruum. Kasutada iostream omaga tundi nimeruumi, peaks programm olema järgmine:

#kaasake
kasutades nimeruumi std;

Pange tähele selle kasutamist kasutades direktiiv ja tundi . Termin #kaasake on eeltöötlusdirektiiv ega lõpe semikooloniga. See sisaldab iostreami faili selle direktiivi kohas.

Järeldus

Nimeruum on ulatus. Nimeruumi kirjeldus (määratlus) sisaldab C ++ objektide, funktsioonide ja muude olemite põhideklaratsioone ja/või definitsioone. Väljaspool nimeruumi määratlust pääseb nimele juurde süntaksiga, namespaceName :: nimi . Peale globaalse nimeruumi (globaalne ulatus) tuleks kõik nimeruumid deklareerida plokis. See plokk on nimeruumi võimalike hajutatud piirkondade esimene osa. Koos kasutades direktiivi, saab nimeruumi laiendada piirkondadena ka teistes valdkondades. Nimeruumidel, mille piirkonnad on ühendatud, ei tohiks erinevates nimeruumide plokkides olla sama muutuja nimi, kuna see tekitaks ikkagi nimede konflikti.

Chrys