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
- Névtér meghatározása C ++ nyelven
- Emlékeztetni kell egy névtér definiálásakor
- A Névtér használata C ++ nyelven
- Nem egyértelmű névterek
- Beágyazott névterek
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.
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,
- A használó irányelv
- A felhasználási nyilatkozat
- 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.