logo

névtér a C ++ -ban | 2. beállítás (névtér és névtelen névtér kiterjesztése)

Az 1. beállított névtereket bevezettük az 1. beállítás alatt.
Névtér a C ++ -ban | 1. készlet (Bevezetés)

részleges differenciálódás a latexben

Névtér meghatározása:



A névtér -meghatározás a kulcsszó névtérrel kezdődik, amelyet a névtér név követ, az alábbiak szerint:

névtér névtér_név 
{{
// kódnyilatkozatok, azaz változó (int a;)
módszer (érvénytelen hozzáadás ();)
Osztályok (osztály hallgató {};)
}

Meg kell jegyezni, hogy a záró zárójel után nincs félig (;).
A függvény vagy a változó névtér-kompatibilis verziójának hívásához az alábbiak szerint készítse el a névtér nevét:
NAMPACE_NAME :: kód;  // A kód lehet változó funkció vagy osztály.



Az irányelv használata:

Kerülheti a névterek előkészítését a névtér -irányelv használatával. Ez az irányelv azt mondja a fordítónak, hogy a következő kód a neveket használja a megadott névtérben. 
A névtér tehát a következő kódra vonatkozik:

C++
#include    using namespace std; // first name space namespace first_space {  void func()  {  cout << 'Inside first_space' << endl;  } } // second name space namespace second_space {  void func()  {  cout << 'Inside second_space' << endl;  } } using namespace first_space; int main () {  // This calls function from first name space.  func();  return 0; } 

Az irányelvben bevezetett nevek betartják a normál hatályszabályokat. A név látható a használati irányelv pontjától annak a hatókörnek a végéig, amelyben az irányelv megtalálható. A külső hatókörben meghatározott azonos nevű entitások rejtve vannak.



Beágyazott névterek:

A névterek beágyazhatók, ahol az egyik névtér meghatározhatja a másik névtérben a következőket:

SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } }

A beágyazott névtér tagjait a következő:
// A NAMPACE_NAME2 tagjainak hozzáférése
névtér használata a namesspace_name1 :: namesspace_name2;
// A névtér tagjainak hozzáférése: név1
névtér használata a névtér_name1;


A fenti állításokban, ha a Namesspace_NAME1 -et használja, akkor a NameSpace_NAME2 elemeit a következőképpen elérhetővé teszi:

C++
#include    using namespace std; // first name space namespace first_space {  void func()  {  cout << 'Inside first_space' << endl;  }  // second name space  namespace second_space  {  void func()  {  cout << 'Inside second_space' << endl;  }  } } using namespace first_space::second_space; int main () {  // This calls function from second name space.  func();    return 0; } 


A globális térben egynél több névteret is létrehozhat. Ezt kétféle módon meg lehet tenni. 
 

    névterek, amelyek különböző nevekkel rendelkeznek 
     
CPP
// A C++ program to show more than one namespaces  // with different names. #include    using namespace std; // first name space namespace first {  int func() { return 5; } } // second name space namespace second {  int func() { return 10; } } int main() {  // member function of namespace  // accessed using scope resolution operator  cout &lt;&lt; first::func() &lt;&lt;&quot;n&quot;;   cout &lt;&lt; second::func() &lt;&lt;&quot;n&quot;;   return 0; } 

  • Kimenet: 
     
5 10
    A névterek meghosszabbítása (az azonos nevet kétszer használva) 
    Lehetőség van két névtér -blokk létrehozására is, amelynek azonos neve van. A második névtérblokk nem más, mint az első névtér folytatása. Egyszerűbb szavakkal elmondhatjuk, hogy mindkét névter nem különböznek egymástól, hanem valójában ugyanazok, amelyeket részben meghatároznak. 
     
CPP
// C++ program to demonstrate namespace extension #include    using namespace std; // first name space namespace first  {   int val1 = 500;  } // rest part of the first namespace namespace first  {   int val2 = 501;  } int main() {  cout &lt;&lt; first::val1 &lt;&lt;&quot;n&quot;;   cout &lt;&lt; first::val2 &lt;&lt;&quot;n&quot;;   return 0; } 

  • Kimenet: 
     
500 501


Névtelen névterek  
 

  • Közvetlenül ugyanabban a programban használhatók, és az egyedi azonosítók deklarálására szolgálnak.
  • A névnév neve nevezetes névtérben a névtér nyilatkozatában nem említve.
  • A névtér nevét a fordító egyedileg generálja.
  • A létrehozott névtelen névterek csak a fájlban érhetők el, amelyben létrehozott.
  • A névtelen névterek a változók statikus deklarációjának pótlása.


 

cdr teljes formában
CPP
// C++ program to demonstrate working of unnamed  // namespaces #include    using namespace std; // unnamed namespace declaration namespace  {  int rel = 300;  } int main() {  cout &lt;&lt; rel &lt;&lt; &quot;n&quot;; // prints 300  return 0; } 

Kimenet: 
 

300