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)

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.


 

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