معدّلات الوصول في C++

معدّلات الوصول في C++

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

Types_of_access_modifier

دعونا نناقش ذلك واحدا تلو الآخر

1. المحدد العام

المحدد العام يجعل أعضاء الفصل (المتغيرات والوظائف) يمكن الوصول إليهم من أي مكان - داخل الفصل خارج الفصل أو حتى ملفات أخرى.

2. المحدد الخاص

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

CPP
   #include          using     namespace     std  ;   class     Employee     {   private  :         // salary and empId cannot be accessed       // from outside the Class      double     salary  ;      int     empID  ;   public  :         string     name  ;     // Name can be accessed anywhere          Employee  (  string     n       double     s       int     id  )     {      name     =     n  ;      salary     =     s  ;      empID     =     id  ;      }   };   int     main  ()     {      Employee     emp  (  'Fedrick'       50000       101  );      cout      < <     'Name: '      < <     emp  .  name      < <     endl  ;      return     0  ;   }   

الإخراج
Name: Fedrick  

ماذا يحدث إذا حاولنا الوصول إلى الأعضاء الخاصين؟

يعطي الكود خطأ في المترجم كما نرى أدناه.

C++
   #include          using     namespace     std  ;   class     Employee     {   private  :         double     salary  ;      int     empID  ;   public  :         string     name  ;      // Constructor      Employee  (  string     n       double     s       int     id  )     {      name     =     n  ;      salary     =     s  ;      empID     =     id  ;      }   };   int     main  ()     {      Employee     emp  (  'Fedrick'       50000       101  );      cout      < <     emp  .  salary      < <     endl  ;         return     0  ;   }   

الإخراج

 compilation error    
prog.cpp: In function ‘int main()’:
prog.cpp:22:17: error: ‘double Employee::salary’ is private within this context
cout < < emp.salary < < endl;
^~~~~~
prog.cpp:6:12: note: declared private here
double salary;
^~~~~~

3. المحدد المحمي

  • يتيح المحدد المحمي إمكانية الوصول إلى الأعضاء داخل الفصل نفسه وفيه مشتق (طفل) فصول ولكن لا تشكل كودًا خارجيًا.
  • يتم استخدامه بشكل أساسي في الميراث مما يسمح للفصول الفرعية بإعادة استخدام البيانات والوظائف أو تعديلها مع إبقائها مخفية عن العالم الخارجي.
CPP
   #include          using     namespace     std  ;   class     Employee     {   private  :         double     salary  ;   protected  :         int     empID  ;   public  :         string     name  ;      Employee  (  string     n       double     s       int     id  )     {      name     =     n  ;      salary     =     s  ;      empID     =     id  ;      }   };   // Derived class (inherits from Employee)   class     Manager     :     public     Employee     {   public  :      Manager  (  string     n       double     s       int     id  )     :     Employee  (  n       s       id  )     {}      void     showDetails  ()     {      cout      < <     'Manager Name: '      < <     name      < <     endl  ;         cout      < <     'Manager ID: '      < <     empID      < <     endl  ;         }   };   int     main  ()     {      Employee     emp  (  'Fedrick'       50000       101  );      cout      < <     'Employee Name: '      < <     emp  .  name      < <     endl  ;      Manager     m  (  'Rohit'       70000       102  );      m  .  showDetails  ();         return     0  ;   }   

الإخراج
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


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

إنشاء اختبار