logo

Namespace v C ++ | Set 2 (rozšírenie menného priestoru a nemenovaný názvový priestor)

Zaviedli sme názvové priestory do nižšie uvedenej sady 1.
Namespace v C ++ | Sada 1 (Úvod)

Definovanie menného priestoru:

Definícia názvového priestoru začína pomocou názvového priestoru kľúčového slova, po ktorom nasleduje názov menného priestoru takto:



názvový priestor názvu namespace_name 
{
// Deklarácie kódu, t.j. premenná (int a;)
metóda (void add ();)
triedy (študent triedy {};)
}

Je potrebné poznamenať, že po záverečnej ortéze neexistuje žiadny bodkočiar (;).
Ak chcete zavolať verziu funkcie s povolením menného priestoru, alebo premennú názov menného priestoru nasledovne:
namespace_name :: code;  // Kód by mohol byť variabilná funkcia alebo trieda.

Použitie smernice:

Môžete sa tiež vyhnúť prípravám menných priestorov pomocou smernice používania menného priestoru. Táto smernica hovorí kompilátorovi, že nasledujúci kód využíva názvy v určenom priestore názvov. 
Názov je teda predpokladaný pre nasledujúci 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; } 

Mená zavedené v použití smernice dodržiavajú pravidlá normálneho rozsahu. Názov je viditeľný od bodu použitia smernice do konca rozsahu, v ktorom sa nachádza smernica. Entity s rovnakým názvom definované vo vonkajšom rozsahu sú skryté.

Vnorené menné priestory:

Menové priestory môžu byť vnorené tam, kde môžete definovať jeden menný priestor v inom priestore mena nasledovne:

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

Môžete mať prístup k členom vnoreného menného priestoru pomocou operátorov rozlíšenia takto:
// na prístup k členom mennej espace_name2
Použitie namespace namespace_name1 :: namespace_name2;
// na prístup k členom menného priestoru: name1
Použitie namespace namespace_name1;


Vo vyššie uvedených príkazoch Ak používate namespace_name1, sprístupní prvky menného priestoru_name2 v rozsahu nasledovne:

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


V globálnom priestore je tiež možné vytvoriť viac ako jeden menný priestor. To sa dá urobiť dvoma spôsobmi. 
 

    menné priestory s rôznymi názvami 
     
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šírenie menných priestorov (dvakrát s použitím rovnakého názvu) 
    Je tiež možné vytvoriť dva bloky menného priestoru s rovnakým názvom. Druhý blok menného priestoru nie je nič iné ako v skutočnosti pokračovanie prvého priestoru menného priestoru. Zjednodušenými slovami môžeme povedať, že oba menné priestory sa nelíšia, ale v skutočnosti to isté, ktoré sa definujú v častiach. 
     
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


Nemenované menné priestory  
 

  • Sú priamo použiteľné v rovnakom programe a používajú sa na vyhlásenie jedinečných identifikátorov.
  • V nemenovaných názvových priestoroch názov menného priestoru, ktorý nebol uvedený v Deklarácii menného priestoru.
  • Názov menného priestoru je jedinečne generovaný kompilátorom.
  • Nemenované názvové priestory, ktoré ste vytvorili, budú prístupné iba v rámci súboru, v ktorom ste ho vytvorili.
  • Nemenované menné priestory sú náhradou za statické vyhlásenie premenný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