مساحة الاسم في C++ | المجموعة 2 (توسيع مساحة الاسم ومساحة الاسم غير المسماة)

لقد قدمنا ​​مساحات الأسماء في المجموعة 1 أدناه.
مساحة الاسم في C++ | المجموعة 1 (مقدمة)

تحديد مساحة الاسم:

يبدأ تعريف مساحة الاسم بمساحة اسم الكلمة الأساسية متبوعة باسم مساحة الاسم كما يلي:

مساحة الاسم  namespace_name 
{
// إعلانات الكود، أي المتغير  (int a;)
الطريقة (إضافة باطلة () ؛)
الفصول الدراسية (طالب الفصل {}؛)
}

تجدر الإشارة إلى أنه لا توجد فاصلة منقوطة (؛) بعد قوس الإغلاق.
لاستدعاء الإصدار الممكّن لمساحة الاسم لأي من الوظيفة أو المتغير، قم بإضافة اسم مساحة الاسم كما يلي:
namespace_name: :code;  يمكن أن يكون الكود // دالة أو فئة متغيرة.

التوجيه باستخدام:

يمكنك أيضًا تجنب إضافة مساحات الأسماء مسبقًا باستخدام توجيه مساحة الاسم. يخبر هذا التوجيه المترجم أن الكود اللاحق يستخدم الأسماء في مساحة الاسم المحددة. 
وبالتالي يتم تضمين مساحة الاسم للتعليمة البرمجية التالية:

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
باستخدام مساحة الاسم namespace_name1::namespace_name2;
// للوصول إلى أعضاء مساحة الاسم:name1
باستخدام مساحة الاسم namespace_name1؛


في العبارات المذكورة أعلاه، إذا كنت تستخدم namespace_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