Minden, amit tudnia kell a névtérről a C ++ nyelven



Ez a cikk részletes és átfogó ismereteket nyújt a C ++ névtérről. Különböző típusúak és felhasználhatók bármelyik programban.

A C ++ névtér a kód logikai csoportokba rendezésére és a névütközések megelőzésére szolgál, különösen akkor, ha a kódbázis több könyvtárat is tartalmaz. Ebben a cikkben a következő mutatók kerülnek ismertetésre:

A Névtér szükségessége

Vegyünk egy helyzetet, írunk egy olyan kódot, amelynek az abc () nevű függvénye van, és van egy másik előre definiált könyvtár, amelynek szintén ugyanaz az abc () függvénye. A fordítás idején a fordítónak fogalma sincs arról, hogy az abc () függvény melyik verziójára hivatkozunk a kódunkban.





Névtér c ++ formátumban

Ennek a nehézségnek a leküzdésére a névteret tervezték és kiegészítő információként használják a különböző könyvtárakban elérhető, azonos funkciójú, függvények, változók, osztályok stb. Megkülönböztetésére. A névtér használatával meghatározhatjuk a nevek meghatározásának kontextusát. Lényegében a névtér meghatározza a hatókört.



Az összes C ++ szabványos könyvtártípus és függvény deklarálva van az SD névtérben vagy az SD-be ágyazott névterekben, így széles körben használják a legtöbb programban.

Névtér meghatározása

A névtér meghatározásához a névtér kulcsszóval kezdjük, amelyet a névtér neve követ, az alábbiak szerint:

névtér névtér_név {int a, b // kóddeklarációk, ahol // a és b deklarálva vannak a // névtér_név hatókörében}

Emlékeztetni kell egy névtér definiálásakor

  • A névtér deklarációk csak globális terjedelemben jelennek meg.
  • A névtér deklarációk nem rendelkeznek hozzáférési specifikátorokkal.
  • A névtér deklarációk beágyazhatók egy másik névtérbe.
  • A névtér meghatározásának záró zárójelét követően nem kell pontosvesszőt adni.
  • A névtér meghatározása több egységre osztható.
#include névtér használata std névtér first_function {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }

Kimenet:



A fenti példában a func () függvény két különböző időpontban történő meghatározásához a névtér fogalmát használjuk. Az első függvényt a névtér első_funkció és alatt definiáljukmásodik függvény névtér alatt második_funkció. Ezeknek a függvényeknek a meghívásához a hatókör-felbontás operátort használjuk a következő módon - first_function :: func () és second_function :: func ().

A Névtér használata C ++ nyelven

Háromféleképpen lehet névteret használni a programban,

  1. A használó irányelv
  2. A felhasználási nyilatkozat
  3. Hatókör felbontás kezelő (: :)

A használó irányelv

Kerülhetjük a névterek előkészítését a felhasználásával névtér irányelv. felhasználásával kulcsszó lehetővé teszi számunkra, hogy egy teljes névteret importáljunk a programjába globális hatókörrel. Használható névtér importálására egy másik névtérbe vagy bármely programba a követelményünknek megfelelően.

függvény típusa sql-ben

Vegyünk egy fejlécfájlt Namespace_first.h:

névtér Első {int a class First_class {int i}}

A fenti névtér fejlécfájl beillesztése a Namespace_second.h fájlba: tartalmazza a „Namespace_first.h” szót

mit jelent a tranziens a java-ban
névtér Második {a névtér használatával Első Első_osztály objektum y}

A névtér_Előbbet importáljuk a névtér_Másodpercbe, így a First_class osztály mostantól elérhető lesz a névtér_Másodpercben. Ezért a következő programot külön fájlba írhatjuk, tegyük fel, hogy new_file.cpp.

#include 'Namespace_second.h' void test () {a névtér használatával Second // az First_class First_class objektum osztályának létrehozása obj2}

Ennélfogva , a using direktíva sokkal könnyebbé teszi a névtér használatát C ++ nyelven, ahol csak akarja.

A felhasználási nyilatkozat

A using-deklarációban egy-egy konkrét nevet importálunk, amely csak az aktuális hatókörön belül érhető el, és a hatókör-felbontás segítségével hívja meg. MEGJEGYZÉS: A using-deklarációval importált név felülírhatja az irányelv használatával importált nevet. Ezt láthatjuk az alábbi példában.

Vizsgáljuk meg a New_File.h fejlécfájlt:

névtér Első {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

Most hozzunk létre egy új programfájlt New_file_2.cpp névvel az alábbi kóddal:

#include 'New_file.h' void B () {az első névtér használatával // az irányelv használata a Second :: A használatával // a deklaráció használata A névnévtér A :: (//) A osztályának () // A hívások () a második névtérből}

Hatókörfelbontás operátor (: :)

A névtérben deklarált bármely nevet kifejezetten meghatározhatjuk a névtér nevével és a hatókör felbontásával. :: ' operátor az azonosítóval.

névtér New_space {class X {static int i public: void func ()} // osztálynév deklarációs osztály Y} // statikus osztályváltozó inicializálása int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }

Nem egyértelmű névtér a C ++ nyelven

Mint tudjuk, a C ++ névtér egy több részben definiálható, így külön meghatározott részeinek összegéből áll. Tehát, ha a névtér egyik részéhez egy másik fájlban definiált név szükséges, akkor ezt a nevet továbbra is deklarálni kell a hatókörében. A következő névtér megírása a következő módon vagy új névteret határoz meg, vagy új elemeket ad hozzá a meglévőhöz:

névtér névtér_név {// kód törzs}

Beágyazott névtér C ++ nyelven

A névterek könnyen beágyazhatók, és az egyik névteret meghatározhatjuk egy másik névtéren belül az alábbiak szerint:

névtér névtér_név1 {// névtér_neve1 névtér névtér névtér_név2 {// kódtest beágyazott névnévtér_neve2}}

Ezzel véget értünk a Névtér a C ++ cikkben. Remélem, képet kapott arról, hogy mi is pontosan a névtér a C ++ nyelven, és mik a különböző módjai annak meghatározására. Ha többet szeretne megtudni, nézze meg a Edureka, egy megbízható online tanulási társaság. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát arra tervezték, hogy mind az alapvető, mind a fejlett Java koncepciókra kiképezzen különféle Java keretrendszereket, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.