logo

Пространство на имена в C ++ | Комплект 2 (разширяване на пространството от имена и неназовано пространство от имена)

Въведохме пространства от имена по -долу набор 1.
Пространство на имена в C ++ | Комплект 1 (Въведение)

Определяне на пространство от имена:



Дефиницията на пространството на имена започва с пространството на ключовите думи, последвано от името на пространството от имена, както следва:

Пространство на имена Namespace_name 
{
// Декларации на код, т.е. променлива (int a;)
метод (void add ();)
класове (ученик от клас {};)
}

Трябва да се отбележи, че след затварящата скоба няма запеталон (;).
За да извикате версията с активирана пространство на имена на функция или променлива, представете името на пространството от имена, както следва:
namesspace_name :: код;  // Кодът може да бъде променлива функция или клас.



Използването на директива:

Можете също така да избегнете представяне на пространства от имена с директивата за използване на пространството от имена. Тази директива казва на компилатора, че следващият код използва имена в определеното пространство на имена. 
Следователно пространството от имена се подразбира за следния код:

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

Имената, въведени в използване на директива, подчинявайте на правилата за нормален обхват. Името се вижда от точката на използването на директивата до края на обхвата, в която е намерена директивата. Субектите със същото име, дефинирани във външен обхват, са скрити.



Вложени пространства от имена:

Пространствата с имена могат да бъдат вложени, където можете да определите едно пространство на имена вътре в друго име, както следва:

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

Можете да получите достъп до членове на вложеното пространство на имена, като използвате операторите на резолюция, както следва:
// за достъп до членове на namespace_name2
Използване на пространство на имена Namesspace_name1 :: namespace_name2;
// за достъп до членове на пространството от имена: име1
Използване на пространство на имена Namesspace_name1;


В горните изявления, ако използвате namesspace_name1, той ще направи елементи на namespace_name2 налични в обхвата, както следва:

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


Възможно е също така да се създадат повече от едно пространство на имена в глобалното пространство. Това може да стане по два начина. 
 

    Пространства с имена с различни имена 
     
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; } 

  • Резултат: 
     
5 10
    Удължаване на пространствата от имена (използвайки същото име два пъти) 
    Възможно е също така да се създадат два блока на пространството на имена, които имат същото име. Вторият блок на пространството на имена не е нищо друго, освен продължаване на първото пространство на имена. С по -прости думи можем да кажем, че и двете пространства от имена не са различни, но всъщност еднакви, които се определят на части. 
     
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; } 

  • Резултат: 
     
500 501


Неназовани пространства от имена  
 

  • Те са пряко използваеми в една и съща програма и се използват за деклариране на уникални идентификатори.
  • В неназовани пространства от имена на пространството от имена в не е споменато в декларацията на пространството на имена.
  • Името на пространството от имена се генерира уникално от компилатора.
  • Неназованите пространства от имена, които сте създали, ще бъдат достъпни само във файла, в който сте го създали.
  • Неназованите пространства от имена са заместител на статичната декларация на променливите.


 

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

Резултат: 
 

300


 

плащане с git