מרחב השמות ב- 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 :: קוד;  // קוד יכול להיות פונקציה או מחלקה משתנים.

ההנחיה המשתמשת:

אתה יכול גם להימנע מהכנת מרחבי שמות באמצעות הנחיית מרחב השמות. הנחיה זו אומרת למהדר כי הקוד שלאחר מכן עושה שימוש בשמות במרחב השמות שצוין. 
מרחב השמות משתמע אפוא על הקוד הבא:

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 ועזור לחנונים אחרים.