معدّلات الوصول في C++
معدّلات الوصول هي كلمات رئيسية خاصة في C++ التي تتحكم في رؤية أعضاء الفصل (البيانات والوظائف).
إنها تساعد في تنفيذ إخفاء البيانات عن طريق تقييد أو السماح بالوصول إلى أجزاء معينة من الفصل.
دعونا نناقش ذلك واحدا تلو الآخر
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. المحدد المحمي
- يتيح المحدد المحمي إمكانية الوصول إلى الأعضاء داخل الفصل نفسه وفيه مشتق (طفل) فصول ولكن لا تشكل كودًا خارجيًا.
- يتم استخدامه بشكل أساسي في الميراث مما يسمح للفصول الفرعية بإعادة استخدام البيانات والوظائف أو تعديلها مع إبقائها مخفية عن العالم الخارجي.
#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
إنشاء اختبارملحوظة : هذا الوصول من خلال الميراث يمكن أن يغير معدل الوصول لعناصر الفئة الأساسية في الفئة المشتقة اعتمادًا على طريقة الميراث .