سطح دسترسی Protect

سطح دسترسی protect اجازه می دهد که اعضای کلاس، فقط در کلاسهای مشتق شده از کلاس پایه قابل دسترسی باشند. بدیهی است که خود کلاس پایه هم می تواند به این اعضا دسترسی داشته باشد. کلاسهایی که از کلاس پایه ارث بری نکرده اند نمی توانند به اعضای با سطح دسترسی protect یابند. در مورد سطوح دسترسی public و private قبلا توضیح دادیم. در جدول زیر نحوه دسترسی به سه سطح ذکر شده نشان داده شده است :

قابل دسترسی در public private protected
داخل کلاس true true true
خارج از کلاس true false false
کلاس مشتق true false true

مشاهده می کنید که public بیشترین سطح دسترسی را داراست. صرف نظر از مکان، اعضای public در هر جا فراخوانی می شوند و قابل دسترسی هستند. اعضای private فقط در داخل کلاسی که به آن تعلق دارند قابل دسترسی هستند. کد زیر رفتار اعضای دارای این سه سطح دسترسی را نشان می دهد :

   1: #include <iostream>
   2: 
   3: using namespace std;
   4: 
   5: class Parent
   6: {
   7:     protected: int protectedMember = 10;
   8:     private  : int privateMember = 10;
   9:     public   : int publicMember = 10;
  10: };
  11: 
  12: class Child : public Parent
  13: {
  14:     Child()
  15:     {
  16:         protectedMember = 100;
  17:         privateMember = 100;
  18:         publicMember = 100;
  19:     }
  20: };
  21: 
  22: int main()
  23: {    
  24:     Parent myParent;
  25:  
  26:     myParent.protectedMember = 100;
  27:     myParent.privateMember = 100;
  28:     myParent.publicMember = 100;
  29: }

کدهایی که با خط قرمز نشان داده شده اند نشان دهنده وجود خطا هستند، چون فیلدهای protect و private در خارج از کلاسی که به آن تعلق دارند یعنی کلاس Parent، غیر قابل دسترسی هستند. همانطور که در خط 17 مشاهده می کنید کلاس Child سعی می کند که به عضو private کلاس Parent دسترسی یابد. از آنجاییکه اعضای private در خارج از کلاس قابل دسترسی نیستند، حتی کلاس مشتق در خط 17 نیز ایجاد خطا می کند. اگر شما به خط 14 توجه کنید کلاس Child می تواند به عضو protect کلاس Parent دسترسی یابد چون کلاس Child از کلاس Parent مشتق شده است. حال به خط 26 و 27 نگاهی بیندازید. می بینید که برنامه پیغام خطا می دهد، چون اعضای protect و private در خارج از کلاسی که به آن تعلق دارند غیر قابل دسترسی هستند.