מרחב השמות ב- C ++ | הגדר 2 (הרחבת מרחב השמות ומרחב השמות ללא שם)

הצגנו מרחבי שמות להלן סט 1.
מרחב השמות ב- C ++ | סט 1 (מבוא)

הגדרת מרחב שמות:

הגדרת מרחב השמות מתחילה במרחב השמות של מילות המפתח ואחריו שם מרחב השמות כדלקמן:

מרחב שמות NAMESPACE_NAME 
{
// הצהרות קוד כלומר משתנה (int a;)
שיטה (void add ();)
שיעורים (תלמיד כיתה {};)
}

יש לציין כי אין סמיקולון (;) לאחר הסד הסגירה.
כדי להתקשר לגרסה המאפשרת מרחב שמות של פונקציה או משתנה להכין את שם מרחב השמות באופן הבא:
NAMESPACE_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  ;   }   

שמות שהוצגו בהנחיה ציית לכללי היקף רגילים. השם נראה מנקודת ההנחיה השימוש עד סוף ההיקף בו נמצאת ההנחיה. ישויות עם אותו שם המוגדר בהיקף חיצוני מוסתרות.

מרחבי שמות מקוננים:

ניתן לקנן מרחבי שמות במקום בו תוכלו להגדיר מרחב שמות אחד בתוך חלל שם אחר כדלקמן:

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