C ++ nimitila

C Namespace



Nimitila C ++: ssa on yleinen laajuus. Sen ilmoitus alkaa varatulla sanalla, nimiavaruudella, jota seuraa ohjelmoijan valitsema nimi ja sitten lohkot hakasulkeissa. Lohko sisältää C ++ -objektien, -toimintojen ja muiden entiteettien perusilmoitukset ja/tai määritelmät.

Harkitse seuraavia kahta skalaarilausetta maailmanlaajuisesti, seuraavassa ohjelmassa:







#sisältää
käyttämällä nimiavaruuden std;

intMUUTTU= 5;
kelluaMUUTTU= 2.3;

inttärkein()
{

palata 0;
}

Tämän ohjelman kääntäminen johtaa käännösvirheeseen. On kaksi muuttujaa, joilla on sama nimi, MUUTTU . Vaikka ne ovat kaksi eri tyyppistä muuttujaa, int ja kellua , kääntäjä hylkää nämä kaksi ilmoitusta, koska ne ovat samannimisiä. Seuraava ohjelma ratkaisee tämän ongelman ilmoittamalla muuttujat samalla nimellä kahdessa eri yleisessä laajuudessa:



#sisältää
käyttämällä nimiavaruuden std;

nimitila NA
{
intMUUTTU= 5;
}

nimitila NB
{
kelluaMUUTTU= 2.3;
}

inttärkein()
{
kustannus<<NA::MUUTTU << '' n'';
kustannus<<HUOM::MUUTTU << '' n'';

palata 0;
}

Lähtö on seuraava:



5
2.3

Yllä olevassa ohjelmassa on kaksi nimiavaruutta: NA , jolla on kokonaisluvun määritelmä, ja HUOM , jolla on kellukkeen määritelmä, mutta jolla on sama nimi kuin NA: n kokonaisluku. Lopuksi, kun ohjelma ajettiin, käytettiin samaa nimeä kahdelle eri muuttujalle. Huomaa, että kahden eri muuttujan saman nimen käyttämiseksi on käytettävä nimitilan nimen nimeä ja sen jälkeen yhteistä tunnistetta. Skannaustarkkuuden operaattori erottaa nimitilan nimen ja yhteisen tunnisteen, :: . Nimitilojen nimi erottaa objektit.





Tässä artikkelissa käsitellään nimitilan peruskäsitettä ja sen käyttöä C ++ -ohjelmointikielellä. Tämän artikkelin noudattamiseksi sinulla on oltava C ++ -kielen perustiedot. Sinun pitäisi myös tuntea C ++ -alue, vaikka se selitetään lyhyesti tässä artikkelissa. Jos haluat lisätietoja C ++ -alueesta, etsi lause Scope C ++: ssa (ilman lainausmerkkejä) minkä tahansa linuxhint.com -verkkosivun hakukentästä ja paina Enter -näppäintä. Tämä johtaa sinut kirjoittajan kirjoittamaan artikkeliin.

Artikkelin sisältö

Mikä on nimitila?

Ilmoittava alue on suurin osa ohjelmaa, jossa entiteetin (muuttujan) nimi on voimassa. Tätä aluetta kutsutaan laajuudeksi. C ++: n nimitila on yleistetty laajuus, jonka päätarkoitus on ratkaista nimiristiriidat. Nimitilassa on perusilmoituksia ja/tai määritelmiä entiteeteistä.



Globaali nimitila ja sen ongelma

Globaali nimitila on maailmanlaajuinen laajuus. Harkitse seuraavaa lyhyttä ohjelmaa:

#sisältää
käyttämällä nimiavaruuden std;

intident= 55;
kelluaident= 12.17;

inttärkein()
{

palata 0;
}

Yllä olevassa ohjelmassa on kaksi muuttujaa, molemmat kutsutaan ident . Nämä muuttujat kuuluvat maailmanlaajuiseen soveltamisalaan; eli ne ovat globaalissa nimitilassa. Tämän ohjelman kääntäminen epäonnistuu virheilmoituksella. Yleinen laajuus ei hyväksy useampaa kuin yhtä muuttujaa, jolla on sama nimi, joten mukautettua nimitilaa tarvitaan.

Mukautettu nimitila

Nimitilassa ei ole vain yhtä nimeä. Nimitilassa on sen sijaan joukko nimiä, jotta vältetään ristiriidat muiden nimisarjojen kanssa. Välttääksesi ristiriidan alemmassa koodissa, kirjoita jokaisen nimen eteen nimitilan nimi ja :: . Seuraava ohjelma havainnollistaa tätä käyttämällä kahta mukautettua nimiavaruutta:

#sisältää
käyttämällä nimiavaruuden std;

nimitila NA
{
intvaihteleva= 6;
kelluaflt;
}

nimitila NB
{
intvaihteleva= 7;
kelluaflt;
}

inttärkein()
{
kustannus<<NA::vaihteleva << '' n'';
kustannus<<HUOM::vaihteleva << '' n'';
NA::flt = 2.5;
HUOM::flt = 4.8;
kustannus<<NA::flt << '' n'';
kustannus<<HUOM::flt << '' n'';

palata 0;
}

Lähtö on:

6
7
2.5
4.8

Huomaa, että nimet NA :: flt ja Huom .: flt on lopulta määritelty pää () toiminto. C ++ ei salli tällaista määritelmää maailmanlaajuisesti.

Huomaa, että mukautettu nimiavaruus on sisäisen nimitilan yleinen nimiavaruus.

Käyttödirektiivi

Voit välttää nimiavaruuden :: nimen kirjoittamisen koko ajan vain nimen sijasta sen jälkeen, kun olet ilmoittanut nimitilan, voit käyttää käyttämällä direktiivi. Syntaksi käyttää käyttämällä direktiivi on seuraava:

käyttämällä nimiavaruutta Namespace_name;

The käyttämällä direktiivi ei ole esikäsittelydirektiivi, joten se päättyy puolipisteeseen (;).

Seuraava ohjelma havainnollistaa käyttämällä direktiivi ja paljon muuta:

#sisältää
käyttämällä nimiavaruuden std;

nimitila NB
{
intvaihteleva= 7;
inttoiminto()
{
palatavaihteleva;
}
}

intfn()
{
käyttämällä nimiavaruutta NB;
intmyVar2=toiminto();
// muut objektit ja toiminnot NB: stä.
palatamyVar2;
}

intmyVar3=HUOM::toiminto();

inttärkein()
{
kustannus<<fn() << '' <<myVar3<< '' n'';

palata 0;
}

Tämän ohjelman tulos on 7 7 . Termi käyttämällä nimiavaruutta NB; on sijoitettu vuoden alkuun fn () määritelmä. The func () nimiavaruudesta kutsutaan juuri sen alapuolelle ilman edeltävää merkkiä HUOM:: .

Yleisessä laajuudessa (globaali nimitila) ilmoitettu muuttuja näkyy ilmoituskohdasta tiedoston loppuun. Se näkyy myös sisäkkäisissä nimiavaruuksissa (sisäkkäisissä laajuuksissa), kuten sisäkkäisissä fn () toimintoalue edellä. The käyttämällä direktiivi yhdistää nimitilansa paikasta, johon se sijoitetaan, sen soveltamisalan loppuun, johon se on sijoitettu.

Nimi func () NB -nimitilasta ei näy fn () määritelmä, koska käyttämällä nimiavaruutta NB; sijoitettiin toimintoalueeseen (lohkoon). Tässä tilanteessa käyttää func () NB -nimiavaruuden lohkon (laajuuden) ulkopuolella sitä tulee edeltää HUOM:: , kuten seuraavassa lausunnossa:

intmyVar3=HUOM::toiminto();

The käyttämällä direktiivi yhdistää nimitilansa ulkoisen sisäkkäisen nimiavaruuden kanssa paikasta, johon se sijoitetaan, ulomman sisäkkäisen nimiavaruuden loppuun. Seuraavassa ohjelmassa NA -nimitila yhdistetään maailmanlaajuiseen nimitilaan. Molemmat nimitilat ulottuvat sitten fn () funktion määritelmän nimiavaruus, jossa ne liitetään NB -nimitilaan. NB -nimiavaruus päättyy fn () funktion määritelmää, ja kaksi edellistä nimiavaruutta jatkuvat tiedoston loppuun (lue koodi läpi).

#sisältää
käyttämällä nimiavaruuden std;

nimitila NA
{
intvaihteleva= 6;
inttoiminto()
{
palatavaihteleva;
}

}

nimitila NB
{
intvaihteleva= 7;
inttoiminto()
{
palatavaihteleva;
}
}

käyttämällä nimiavaruutta NA;
intmyVar0=vaihteleva;
// muut objektit ja toiminnot :: ja NB seuraavat.

intfn()
{
intmyVar1=vaihteleva;
käyttämällä nimiavaruutta NB;
intmyVar2=HUOM::toiminto();
// muut objektit ja toiminnot NB: stä tämän soveltamisalan loppuun asti.
palatamyVar1+myVar2;
}

// Seuraavat vain ::: n ja NB: n objektit ja funktiot.

intmyVar3=HUOM::toiminto();

inttärkein()
{
kustannus<<myVar0<< '' <<fn() << '' <<myVar3<< '' n'';

palata 0;
}

Lähtö on 6, 13, 7 .

Huomautus: Yleinen nimiavaruus on merkitty symbolilla :: , mikä tarkoittaa, että ennen seuraavaa laajuudenratkaisun operaattoria ei ole mitään.

Lausunnon alla on käyttämällä nimiavaruutta NA; globaalin ja NA -nimiavaruuden muuttujia voidaan käyttää ilmoittamatta niiden lähteen nimiavaruudesta. Seuraava lause käyttää vaihteleva NA -nimitilasta. Globaali ja NA yhdistetty nimiavaruusalue ulottuu fn () funktion nimiavaruus. Joten vaihteleva ensimmäisessä lausunnossa fn () toimintoalue, kuuluu NA -nimitilaan.

Koska maailmanlaajuisten ja NA -nimitilojen alue ulottuu koko fn () laajuus, sen jälkeen int myVar2 = Huom .: func (); , mitä tahansa NB -nimiavaruuden nimeä voidaan käyttää vain fn () soveltamisalaa ilman sitä HUOM:: , vain jos sitä ei esiintynyt NA: ssa ja globaaleissa nimitiloissa (lohkoissa). Muussa tapauksessa sen pitäisi edeltää HUOM:: . NA: n ja maailmanlaajuisten yhdistettyjen nimitilojen alue jatkuu fn () määritelmään ja pää () -toimintoa tiedoston loppuun asti.

NB -nimitilan laajennus alkaa int myVar2 = Huom .: func (); kohdassa fn () lohko ja päättyy fn () määritelmälohko.

Huomautus: Nimialueilla, joiden alueet on liitetty, ei saa olla samaa muuttujanimeä eri nimitilalohkoissaan, koska tämä aiheuttaa silti ristiriitoja.

Nimiavaruusalueet

Nimitila on laajuus. Yleisen nimitilan (globaalin laajuuden) lisäksi kaikki nimiavaruudet on ilmoitettava lohkossa. Tämä lohko on nimiavaruuden mahdollisesti hajautettujen alueiden ensimmäinen osa. Käyttäjädirektiivin avulla nimiavaruutta voidaan laajentaa alueiksi muissa laajuuksissa.

Nimitilakappaleessa ilmoitettujen entiteettien sanotaan olevan nimiavaruuden jäseniä, ja näillä ilmoituksilla nimiavaruuden deklaratiiviselle alueelle tuodut nimet sanotaan nimitilan jäsenten nimiksi.

Sisäkkäiset nimitilat

Seuraava ohjelma näyttää sisäkkäiset nimitilat:

#sisältää
käyttämällä nimiavaruuden std;

nimitila A
{
inti= 1;
nimitila B
{
inti= 2;
nimitila C
{
inti= 3;
}
}
}

inttärkein()
{
kustannus<<TO::i << '' <<TO::B::i << '' <<TO::B::C::i << '' n'';

palata 0;
}

Lähtö on:

1 2 3

Huomaa, että kolmeen arvoon on päästy käyttämällä laajuuden tarkkuuden operaattoria.

Normaali nimitila

C ++: ssa on kirjasto, jota kutsutaan vakiokirjastoksi. Tämän kirjaston objektien, toimintojen ja muiden entiteettien nimet ovat nimiavaruudesta, jota kutsutaan standardin nimiavaruudeksi ja joka on kirjoitettu nimellä tuntia . Vakiokirjasto sisältää alikirjastoja, ja yksi näistä alikirjastoista on iostream . The iostream kirjasto sisältää objektin kustannus , jota käytetään tulosten lähettämiseen konsoliin (päätelaitteeseen).

Nimi kustannus on oltava tuntia nimiavaruus. Käyttää iostream sen kanssa tuntia nimitilassa, ohjelman pitäisi olla seuraava:

#sisältää
käyttämällä nimiavaruuden std;

Huomaa käyttö käyttämällä direktiivi ja tuntia . Termi #sisältää on esikäsittelydirektiivi eikä pääty puolipisteeseen. Se sisältää iostream -tiedoston direktiivin kohdassa.

Johtopäätös

Nimitila on laajuus. Nimitilan kuvaus (määritelmä) sisältää C ++ -objektien, -toimintojen ja muiden entiteettien perusilmoitukset ja/tai määritelmät. Nimitilan määritelmän ulkopuolella nimeen pääsee syntaksilla, namespaceName :: nimi . Yleisen nimitilan (globaalin laajuuden) lisäksi kaikki nimiavaruudet on ilmoitettava lohkossa. Tämä lohko on nimiavaruuden mahdollisesti hajautettujen alueiden ensimmäinen osa. Kanssa käyttämällä direktiiviä, nimiavaruutta voidaan laajentaa alueiksi muilla laajuuksilla. Nimialueilla, joiden alueet on liitetty, ei saa olla samaa muuttujanimeä eri nimitilalohkoissaan, koska tämä aiheuttaa silti nimiristiriitoja.

Chrys