logo

Spațiu de nume în C ++ | Set 2 (extinderea spațiului de nume și a spațiului de nume fără nume)

Am introdus spații de nume în setul 1 de mai jos.
Spațiu de nume în C ++ | Setul 1 (Introducere)

Definirea unui spațiu de nume:



O definiție a spațiului de nume începe cu spațiul de nume de cuvinte cheie urmat de numele spațiului de nume după cum urmează:

Nume Space Space_Name 
{
// Declarații de cod adică variabilă (int a;)
metodă (void add ();)
clase (clasă elev {};)
}

Se remarcă faptul că nu există niciun punct și virgulă (;;) după blocajul de închidere.
Pentru a apela la versiunea cu spațiu de nume a funcției sau a variabilei, preparați numele spațiului de nume după cum urmează:
NAGESPACE_NAME :: cod;  // codul ar putea fi funcție sau clasă variabilă.



Directiva de utilizare:

De asemenea, puteți evita prepararea spațiilor de nume cu Directiva Utilizare a spațiului de nume. Această directivă spune compilatorului că codul ulterior utilizează nume în spațiul de nume specificat. 
Spațiul de nume este astfel implicat pentru următorul cod:

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

Numele introduse într -o Directiva care utilizează regulile de aplicare normală. Numele este vizibil din punctul de utilizare a directivei până la sfârșitul domeniului de aplicare în care se găsește directiva. Entitățile cu același nume definit într -un domeniu exterior sunt ascunse.



Spații de nume cuibărite:

Spațiile de nume pot fi cuibărite acolo unde puteți defini un spațiu de nume în interiorul unui alt spațiu de nume după cum urmează:

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

Puteți accesa membrii spațiului de nume cuibărit folosind operatori de rezoluție după cum urmează:
// pentru a accesa membrii namespace_name2
Utilizarea spațiului de nume NAVESPACE_NAME1 :: NAGESPACE_NAME2;
// pentru a accesa membrii spațiului de nume: nume1
utilizarea spațiului de nume NAVESPACE_NAME1;


În declarațiile de mai sus, dacă utilizați namespace_name1, atunci va pune la dispoziție elemente de namespace_name2 în domeniul de aplicare după cum urmează:

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


De asemenea, este posibil să se creeze mai multe spații de nume în spațiul global. Acest lucru se poate face în două moduri. 
 

    spații de nume având nume diferite 
     
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; } 

  • Ieșire: 
     
5 10
    Extinderea spațiilor de nume (folosind același nume de două ori) 
    De asemenea, este posibil să se creeze două blocuri de spațiu de nume având același nume. Al doilea bloc de spații de nume nu este altceva decât de fapt continuarea spațiului de nume. În cuvinte mai simple, putem spune că ambele spații de nume nu sunt diferite, dar de fapt aceleași care sunt definite în părți. 
     
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; } 

  • Ieșire: 
     
500 501


Spații de nume fără nume  
 

  • Acestea sunt utilizate direct în același program și sunt utilizate pentru declararea identificatorilor unici.
  • În spațiile de nume fără nume, numele spațiului de nume nu este menționat în Declarația de nume de nume.
  • Numele spațiului de nume este generat în mod unic de compilator.
  • Spațiile de nume fără nume pe care le -ați creat vor fi accesibile doar în fișierul în care l -ați creat.
  • Spațiile de nume fără nume sunt înlocuirea declarației statice a variabilelor.


 

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

Ieșire: 
 

300