Latest web development tutorials

C ++ مساحة

تخيل الوضع عندما يكون هناك فئة المسمى زارا اثنين من الطلاب، من أجل التمييز الواضح بينهما، ونحن نستخدم اسم خارج، وكان لاستخدام بعض المعلومات الإضافية، مثل عنوان المنزل أو أولياء أمورهم تسمية، الخ

ويبدو أن الوضع نفسه أيضا في تطبيق C ++. على سبيل المثال، قد كتابة دالة يدعى س ع ص ()، في مكتبة أخرى متوفرة هناك أيضا نفس وظيفة س ع ص (). وهكذا، فإن المترجم لا يمكن تحديد ما كنت تستخدم وظيفة س ع ص ().

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

تحديد النطاقات

تعريف مساحة الاسم الكلمةمساحة الاسم، يليه اسم من مساحة الاسم، على النحو التالي:

namespace namespace_name {
   // 代码声明
}

من أجل استدعاء دالة أو متغير مع مساحة الاسم، تحتاج إلى تسبق ذلك مع اسم مساحة الاسم، على النحو التالي:

name::code;  // code 可以是变量或函数

دعونا نرى كيف تعريف مساحة للكيان وغيرها من وظيفة متغيرة أو:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 调用第一个命名空间中的函数
   first_space::func();
   
   // 调用第二个命名空间中的函数
   second_space::func(); 

   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Inside first_space
Inside second_space

استخدام التعليمات

يمكنك استخدام التوجيهباستخدام مساحة الاسم، حتى عندما لا يمكنك استخدام مساحة اسم مسبوقة مع اسم مساحة الاسم.هذا التوجيه يقول المترجم الذي سيتم استخدام رمز لاحقة اسم مساحة محددة.

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   // 调用第一个命名空间中的函数
   func();
   
   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Inside first_space

ويمكن أيضا أن تستخدم تعليمات باستخدام لتحديد بنود محددة مساحة الاسم. على سبيل المثال، إذا كنت تنوي فقط لاستخدام قسم مساحة cout الأمراض المنقولة جنسيا، يمكنك استخدام العبارة التالية:

using std::cout;

كود لاحق عند استخدام cout لا يمكنك إضافة اسم مساحة الاسم كما بادئة، ولكن البنودالأمراض المنقولة جنسيا مساحة أخرى لا تزال بحاجة إلى إضافة اسم مساحة الاسم كما بادئة، على النحو التالي:

#include <iostream>
using std::cout;

int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

std::endl is used with std!

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

مساحة متقطع

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

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

namespace namespace_name {
   // 代码声明
}

مساحات متداخلة

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

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

يمكنك استخدام :: مشغل للوصول إلى أعضاء مساحة متداخلة:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;

// 访问 namespace:name1 中的成员
using namespace namespace_name1;

في البيان أعلاه، إذا كنت تستخدم namespace_name1، ثم ضمن مجموعة من العناصر namespace_name2 متاحة أيضا على النحو التالي:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // 第二个命名空间
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   // 调用第二个命名空间中的函数
   func();
   
   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Inside second_space