logo

مساحة الاسم في C++ | المجموعة 3 (الوصول وإنشاء الرأس والتداخل والاسم المستعار)

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

طرق مختلفة للوصول إلى مساحة الاسم: توجد في لغة C++ طريقتان للوصول إلى متغيرات ووظائف مساحة الاسم.



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

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

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

تجدر الإشارة إلى أنه لا توجد فاصلة منقوطة (؛) بعد قوس الإغلاق.
لاستدعاء الإصدار الممكّن لمساحة الاسم لأي من الوظيفة أو المتغير، قم بإضافة اسم مساحة الاسم كما يلي:
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; } 

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



مساحات الأسماء المتداخلة:

يمكن أن تتداخل مساحات الأسماء حيث يمكنك تعريف مساحة اسم واحدة داخل مساحة اسم أخرى كما يلي:

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

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 الرئيسية وساعد المهوسون الآخرين.