logo

Espai de noms a C ++ | Set 3 (accedir, crear capçalera, nidificació i aliasing)

Espai de noms a C ++ | Conjunt 1 (Introducció) Espai de noms a C ++ | Conjunt 2 (ampliació d'espai de noms i espai de noms sense nom)

Diferents maneres d’accedir a l’espai de noms: A C ++ hi ha dues maneres d’accedir a variables i funcions d’espai de noms.



Definició d'un espai de nom:

Una definició d'espai de noms comença amb l'espai de noms de paraules clau seguit del nom de l'espai de noms de la manera següent:

namespace  namespace_name   
{
// code declarations i.e. variable  (int a;)
method (void add();)
classes ( class student{};)
}

Cal destacar que no hi ha cap punt i coma (;) després de la clausura de tancament.
Per trucar a la versió habilitat per a l'espai de noms de la funció o la variable Prepend el nom de l'espai de noms de la manera següent:
nom de noms_name :: codi;  // El codi podria ser una funció o classe variable.



La directiva d'ús:

També podeu evitar la prepulsió dels espais de nom amb la Directiva de l'espai de noms. Aquesta directiva indica al compilador que el codi posterior està utilitzant noms a l'espai de noms especificat. 
L'espai de noms està implicat així per al codi següent:

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

Els noms introduïts en una directiva obeeixen regles d'abast normal. El nom és visible des del punt de la Directiva d'ús fins al final de l'abast en què es troba la directiva. Les entitats amb el mateix nom definides en un àmbit exterior estan ocultes.



Espais de noms imbricats:

Els espais de noms es poden nidificar on podeu definir un espai de noms dins d'un altre espai de nom de la següent manera:

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

Podeu accedir als membres de l'espai de noms imbricats mitjançant els operadors de resolució de la següent manera:
// per accedir als membres de nomspace_name2
Utilitzant noms d'espai namespace_name1 :: nomspace_name2;
// Per accedir als membres de l'espai de noms: nom1
Utilitzant noms d'espai de nomspace_name1;


A les afirmacions anteriors si utilitzeu nomspace_name1, farà que els elements de nomspace_name2 estiguin disponibles a l'abast de la següent manera:

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

1. Camella normal  

CPP
// C++ program to demonstrate accessing of variables // in normal way i.e. using '::' #include    using namespace std; namespace geek {  int rel = 300;  } int main() {  // variable ‘rel’ accessed   // using scope resolution operator  cout &lt;&lt; geek::rel &lt;&lt; &quot;n&quot;; // prints 300  return 0; } 

Sortida:

300  

2. Directive 'Utilitzant'  

CPP
// C++ program to demonstrate accessing of variables // in normal way i.e. using 'using' directive #include    using namespace std; namespace geek {  int rel = 300;  } // use of ‘using’ directive using namespace geek; int main() {  // variable ‘rel’ accessed   // without using scope resolution variable  cout &lt;&lt; rel &lt;&lt; &quot;n&quot;; //prints 300    return 0; } 

Sortida:

300  

Utilitzant espai de noms en fitxers de capçalera Podem crear espai de noms en un fitxer i accedir al contingut mitjançant un altre programa. Això es fa de la manera següent.

  • Hem de crear dos fitxers. Un que conté l’espai de noms i totes les funcions de dades i membres que volem utilitzar més endavant.
  • I l’altre programa pot trucar directament al primer programa per utilitzar totes les funcions de dades i membres.

Arxiu 1  

CPP
// file1.h  namespace foo {  int value()   {   return 5;   } } 

Arxiu 2  

CPP
// file2.cpp - Not to be executed online #include    #include file1.h // Including file1 using namespace std; int main ()  {  cout &lt;&lt; foo::value();  return 0; } 

Aquí podem veure que l’espai de noms es crea a File1.h i el valor () d’aquest espai de noms s’anomena a File2.cpp. Espais de noms imbricats En els espais de noms de C ++ també es poden nidificar, és a dir, un espai de noms dins d'un altre. La resolució de variables d'espai de noms és jeràrquica. 

CPP
// C++ program to demonstrate nesting of namespaces #include    using namespace std; // Nested namespace namespace out {  int val = 5;   namespace in  {  int val2 = val;   } } // Driver code int main() {  cout &lt;&lt; out::in::val2; // prints 5  return 0; } 

Sortida:

5  

Espai de noms aliasing: A C ++ podeu utilitzar un nom d'àlies per al nom de l'espai de noms per facilitar l'ús. Els espais de noms existents es poden alias amb noms nous amb la sintaxi següent:

namespace new_name = current_name;  
CPP
#include    namespace name1  {  namespace name2   {  namespace name3   {  int var = 42;  }  } } // Aliasing  namespace alias = name1::name2::name3;   int main() {  std::cout &lt;&lt; alias::var &lt;&lt; 'n'; } 

Sortida:

42  

Si us agraden els geeksforgeeks i voleu contribuir, també podeu escriure un article mitjançant write.geeksforgeeks.org O envieu el vostre article a [email protected]. Consulteu el vostre article que apareix a la pàgina principal de Geeksforgeeks i ajudeu a altres frikis.