logo

Пространство на имена в C ++ | Комплект 3 (Достъп, създаване на заглавка, гнездене и псевдоним)

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

Различни начини за достъп до пространство от имена: В C ++ има два начина за достъп до променливи и функции на пространството от имена.



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

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

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

Трябва да се отбележи, че след затварящата скоба няма запеталон (;).
За да извикате версията с активирана пространство на имена на функция или променлива, представете името на пространството от имена, както следва:
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; } 

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



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

преминаване по пощата

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

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

1. Нормален начин  

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

Резултат:

300  

2. Директива „Използване“  

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

Резултат:

300  

Използване на пространството от имена в заглавни файлове Можем да създадем пространство от имена в един файл и съдържание на достъп, използвайки друга програма. Това става по следния начин.

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

Файл 1  

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

Файл 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; } 

Тук можем да видим, че пространството от имена е създадено във File1.h и стойността () на това пространство на имена се извиква във File2.cpp. Вложени пространства от имена В C ++ пространствата от имена също могат да бъдат вложени, т.е. едно пространство на имена вътре в друго. Разделителната способност на променливите на пространството от имена е йерархична. 

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

Резултат:

5  

Пространство с имена псевдоним: В C ++ можете да използвате име на псевдоним за вашето име на имена за лесна употреба. Съществуващите пространства от имена могат да бъдат псевдоними с нови имена със следния синтаксис:

компютърни мрежи
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'; } 

Резултат:

42  

Ако харесвате geeksforgeeks и бихте искали да допринесете, можете също да напишете статия, използвайки write.geeksforgeeks.org Или изпратете статията си на прегледа[email protected]. Вижте вашата статия, появяваща се на основната страница на Geeksforgeeks и помогнете на други отрепки.