Namespace v C ++ | Sada 2 (rozšiřování názvů a nejmenovaného jmenného prostoru)

Zavedli jsme jmenné prostory v níže uvedené sadě 1.
Namespace v C ++ | Set 1 (Úvod)

Definování jmenného prostoru:

Definice jmenného prostoru začíná názvem klíčových slov následovaným názvem názvů:

Namespace namespace_name 
{
// Deklarace kódu, tj. Proměnná (int a;)
metoda (void add ();)
Třídy (student třídy {};)
}

Je třeba poznamenat, že po závěrečné vzpěře neexistuje žádný středník (;).
Chcete-li volat verzi funkce funkce funkce funkce nebo proměnné, přepravte název názvu následujícím způsobem:
namespace_name :: code;  // kód může být proměnná funkce nebo třída.

Směrnice o použití:

Můžete se také vyhnout přípravě jmenných prostorů pomocí směrnice o používání názvů. Tato směrnice říká kompilátoru, že následující kód využívá názvy v zadaném jmenném prostoru. 
Názvý prostor je tedy implikován pro následující kód:

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  ;   }   

Názvy zavedená ve směrnici Poslouchejte normální pravidla rozsahu. Název je viditelný z bodu použití směrnice na konec rozsahu, ve kterém je nalezena směrnice. Entity se stejným názvem definovaným ve vnějším rozsahu jsou skryty.

Vnořené jmenné prostory:

Jmenné prostory mohou být vnořeny tam, kde můžete definovat jeden jmenný prostor uvnitř jiného názvu prostoru následujícím způsobem:

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

Přístup k členům vnořeného názvů můžete získat pomocí operátorů rozlišení následujícím způsobem:
// pro přístup k členům jmenného prostoru_NAME2
Používání jmenného prostoru namepace_name1 :: namespace_name2;
// pro přístup k členům jmenného prostoru: name1
Používání jmenného prostoru nasepcespace_name1;


Ve výše uvedených příkazech, pokud používáte namespace_name1, pak zpřístupní prvky jmenného prostoru_name2 v rozsahu takto:

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  ;   }   


Je také možné vytvořit více než jeden jmenný prostor v globálním prostoru. To lze provést dvěma způsoby. 
 

    Jmenné prostory s různými jmény  
     
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  ;   }   

  • Výstup: 
     
5 10 
    Rozšíření jmenných prostorů (dvakrát použití stejného jména)  
    Je také možné vytvořit dva bloky jmenného prostoru se stejným názvem. Druhý blok jmenného prostoru není nic jiného než pokračování prvního názvů. Jednoduššími slovy můžeme říci, že oba jmenné prostory nejsou odlišné, ale ve skutečnosti stejné, které jsou definovány po částech. 
     
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  ;   }   

  • Výstup: 
     
500 501 


Nejmenované jmenné prostory  
 

  • Jsou přímo použitelné ve stejném programu a používají se pro deklarování jedinečných identifikátorů.
  • V nejmenovaném jmenném názvu názvu názvů není uvedeno v Deklaraci jmenného prostoru.
  • Název jmenného prostoru je jedinečně generován kompilátorem.
  • Nepojmenované jmenné prostory, které jste vytvořili, budou přístupné pouze v rámci souboru, ve kterém jste jej vytvořili.
  • Nejmenované jmenné prostory jsou náhradou za statické prohlášení proměnných.


 

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  ;   }   

Výstup: 
 

300