كل ما تحتاج لمعرفته حول Namespace في C ++



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن Namespace في C ++. أنواعه واستخداماته المختلفة في أي برنامج.

يتم استخدام Namespace في C ++ لتنظيم التعليمات البرمجية في مجموعات منطقية ولمنع تضاربات الأسماء التي يمكن أن تحدث خاصةً عندما تتضمن قاعدة التعليمات البرمجية مكتبات متعددة. في هذه المقالة سيتم تغطية المؤشرات التالية:

الحاجة إلى مساحة الاسم

ضع في اعتبارك موقفًا ، فنحن نكتب بعض التعليمات البرمجية التي لها وظيفة تسمى abc () وهناك مكتبة أخرى متاحة مسبقًا ولها نفس الوظيفة abc (). الآن في وقت التجميع ، لا يوجد لدى المترجم أي دليل على إصدار وظيفة abc () التي نشير إليها داخل الكود الخاص بنا.





Namespace في c ++

للتغلب على هذه الصعوبة ، تم تصميم مساحة الاسم واستخدامها كمعلومات إضافية للتمييز بين الوظائف والمتغيرات والفئات المتشابهة وما إلى ذلك بنفس الاسم المتاح في مكتبات مختلفة. باستخدام مساحة الاسم ، يمكننا تحديد السياق الذي يتم فيه تعريف الأسماء. في جوهرها ، تحدد مساحة الاسم النطاق.



يتم الإعلان عن جميع أنواع ووظائف مكتبة C ++ القياسية في مساحة الاسم std أو مساحات الأسماء المتداخلة داخل std وبالتالي فهي تستخدم على نطاق واسع في معظم البرامج.

تحديد Namespace

لتحديد مساحة الاسم ، نبدأ بمساحة اسم الكلمات الرئيسية متبوعة باسم مساحة الاسم على النحو التالي:

مساحة الاسم مساحة الاسم_الاسم {int a، b // تعريفات الكود حيث يتم التصريح عن // a و b في // مجال أسماء الفضاء_الاسم}

نقاط يجب تذكرها أثناء تحديد مساحة الاسم

  • تظهر بيانات Namespace في النطاق العام فقط.
  • لا تحتوي تصريحات مساحة الاسم على محددات وصول.
  • يمكن أن تتداخل تعريفات Namespace داخل مساحة اسم أخرى.
  • لا حاجة لإعطاء فاصلة منقوطة بعد قوس الإغلاق لتعريف مساحة الاسم.
  • يمكن تقسيم تعريف مساحة الاسم على عدة وحدات.
#include using the namespace std namespace first_function {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }

انتاج:



في المثال أعلاه لتعريف الدالة func () مرتين مختلفتين ، نستخدم مفهوم مساحة الاسم. نحدد الوظيفة الأولى ضمن دالة مساحة الاسم first_function والوظيفة الثانية ضمن دالة مساحة الاسم second_function. لاستدعاء هذه الوظائف ، نستخدم مشغل دقة النطاق بالطريقة التالية - first_function :: func () و second_function :: func ().

استخدام Namespace في C ++

هناك ثلاث طرق لاستخدام مساحة الاسم في البرنامج ،

  1. استخدام التوجيه
  2. تصريح الاستخدام
  3. عامل تحليل النطاق (: :)

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

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

تعلم ssis خطوة بخطوة

خذ بعين الاعتبار ملف رأس Namespace_first.h:

مساحة الاسم أولاً {int a class First_class {int i}}

تضمين ملف رأس مساحة الاسم أعلاه في ملف Namespace_second.h: تضمين 'Namespace_first.h'

ستؤدي طريقة system.exit إلى إنهاء التطبيق.
مساحة الاسم الثانية {باستخدام مساحة الاسم First_class obj int y}

نقوم باستيراد مساحة الاسم_الأول إلى مساحة_الثانية ، وبالتالي فإن الفئة الأولى_الفئة ستكون متاحة الآن في مساحة_الثانية. ومن ثم يمكننا كتابة البرنامج التالي في ملف منفصل ، دعنا نقول new_file.cpp.

#include 'Namespace_second.h' void test () {using namespace Second // إنشاء كائن من الفئة First_class First_class obj2}

بالتالي ، يسهّل توجيه الاستخدام استخدام مساحة الاسم في C ++ ، أينما تريد.

تصريح الاستخدام

في بيان الاستخدام ، نستورد اسمًا محددًا واحدًا في كل مرة وهو متاح فقط داخل النطاق الحالي ويتم استدعاؤه بمساعدة تحليل النطاق. ملاحظة: الاسم الذي تم استيراده باستخدام تصريح الاستخدام يمكن أن يحل محل الاسم الذي تم استيراده باستخدام التوجيه. يمكننا أن نرى هذا في المثال أدناه.

دعونا ننظر في ملف الرأس New_File.h:

مساحة الاسم أولاً {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

فلنقم الآن بإنشاء ملف برنامج جديد باسم New_file_2.cpp بالرمز أدناه:

#include 'New_file.h' void B () {using namespace First // باستخدام التوجيه باستخدام Second :: A // باستخدام الإعلان First :: A () // class A () of First namepace A () // calls A () من مساحة الاسم الثانية}

عامل دقة النطاق (: :)

يمكننا تحديد أي اسم تم الإعلان عنه في مساحة الاسم بشكل صريح باستخدام اسم مساحة الاسم ودقة النطاق ' :: ' عامل مع المعرف.

مساحة الاسم New_space {class X {static int i public: void func ()} // class name report class Y} // تهيئة متغير فئة ثابتة int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }

Namespace غير متجاورة في C ++

كما نعلم ، يمكن تعريف مساحة الاسم في C ++ في عدة أجزاء ، وبالتالي فهي تتكون من مجموع الأجزاء المحددة بشكل منفصل. لذلك ، إذا كان أحد أجزاء مساحة الاسم يتطلب اسمًا محددًا في ملف آخر ، فلا يزال يتعين الإعلان عن هذا الاسم في نطاقه. كتابة مساحة الاسم التالية بالطريقة التالية إما أن تحدد مساحة اسم جديدة أو تضيف عناصر جديدة إلى مساحة موجودة:

مساحة الاسم مساحة_الاسم {// كود الجسم}

Namespace متداخلة في C ++

يمكن تداخل Namespaces بسهولة ويمكننا تحديد مساحة اسم واحدة داخل مساحة اسم أخرى على النحو التالي:

مساحة الأسماء مساحة الاسم_الاسم 1 {// نص الكود لمساحة الأسماء_الاسم 1 مساحة الأسماء مساحة_الاسم 2 {// جسم الكود nested namamespace_name2}}

مع هذا ، وصلنا إلى نهاية Namespace في مقالة C ++. أتمنى أن تكون قد حصلت على فكرة عن ماهية مساحة الاسم بالضبط في C ++ وما هي الطرق المختلفة لتعريفها. إذا كنت ترغب في معرفة المزيد ، تحقق من بواسطة Edureka ، شركة تعليمية موثوقة عبر الإنترنت. تم تصميم دورة تدريب وإصدار شهادات Java J2EE و SOA من Edureka لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.