ویرایشگر سطح دسترسی کلاس در ++C

مخفی‌سازی داده یکی از مهم‌ترین ویژگی‌های برنامه‌نویسی شی‌گرا می‌باشد که توابع برنامه را از دسترسی مستقیم به عناصر داخلی یک کلاس منع می‌کند. این منع دسترسی بوسیله بخش‌های برچسب دار درون بدنه کلاس انجام می‌گیرد. این برچسب‌ها public، private و protected می‌باشند. کلیدواژه‌های public، private و protected مشخص کننده سطح دسترسی (access specifiers) نام دارند.

یک کلاس می‌تواند شامل چندین بخش public، protected و private باشد. هربخش، تا زمان رسیدن برچسب بخش بعدی یا رسیدن به آکلاد بسته بدنه کلاس ادامه دارد. سطح دسترسی پیش فرض برای کلاس و اعضای آن private می‌باشد.

class Base { 
   public:
      // public members go here
      protected:
 
   // protected members go here
   private:
   // private members go here
 
};

عضوهای public

یک عضو public از هرجایی از برنامه خارج از کلاس قابل دسترسی می‌باشد. همانند مثال زیر، می‌توان متغیرهای عمومی ‌را بدون استفاده از هیچ تابع عضوی تغییر داد.

#include <iostream>
 
using namespace std;
 
class Line {
   public:
      double length;
      void setLength( double len );
      double getLength( void );
};
 
// Member functions definitions
double Line::getLength(void) {
   return length ;
}
 
void Line::setLength( double len) {
   length = len;
}
 
// Main function for the program
int main() {
   Line line;
 
   // set line length
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl;
 
   // set line length without member function
   line.length = 10.0; // OK: because length is public
   cout << "Length of line : " << line.length <<endl;
   
   return 0;
}

با اجرای کد فوق، نتیجه زیر حاصل می‌شود.

Length of line : 6
Length of line : 10

عضوهای private

به یک تابع یا متغیر عضو private نمی‌توان خارج از کلاس دسترسی پیدا کرد و یا حتی آن را مشاهده کرد. تنها خود کلاس و توابع دوست آن اجازه دسترسی به عضوهای private را دارند.

مطلب پیشنهادی:  اشاره‌گرها در ++C

به صورت پیش‌فرض، همه اعضای یک کلاس private هستند، مثلاً در مثال زیر کلاس width یک عضو private است، یعنی تا زمانی‌که برچسبی برای یک عضو تعیین نشود، آن عضو به صورت private مفروض می‌باشد.

class Box {
   double width;
   
   public:
      double length;
      void setWidth( double wid );
      double getWidth( void );
};

عملاً، داده‌ها را در بخش خصوصی و توابع را در بخش عمومی ‌تعریف می‌کنیم تا بتوان به آنها از خارج از کلاس نیز دسترسی داشت. مثال زیر را ملاحظه کنید.

#include <iostream>
 
using namespace std;
 
class Box {
   public:
      double length;
      void setWidth( double wid );
      double getWidth( void );
 
   private:
      double width;
};
 
// Member functions definitions
double Box::getWidth(void) {
   return width ;
}
 
void Box::setWidth( double wid ) {
   width = wid;
}
 
// Main function for the program
int main() {
   Box box;
 
   // set box length without member function
   box.length = 10.0; // OK: because length is public
   cout << "Length of box : " << box.length <<endl;
 
   // set box width without member function
   // box.width = 10.0; // Error: because width is private
   box.setWidth(10.0);  // Use member function to set it.
   cout << "Width of box : " << box.getWidth() <<endl;
 
   return 0;
}

پس از اجرای کد فوق، خروجی زیر حاصل می‌شود.

Length of box : 10
Width of box : 10

عضوهای protected

یک تابع یا متغیر عضو protected خیلی شبیه به عضو private است اما با این مزیت که می‌توان به آنها، از طریق کلاس‌های فرزند مشتق شده دسترسی یافت.

مطلب پیشنهادی:  کامنت گذاری در ++C

کلاس‌های مشتق شده و وراثت را در بخش بعدی یاد خواهید گرفت. مثال زیر را که در آن یک کلاس فرزند به نام SmallBox را از کلاس والد Box مشتق گرفته‌ایم مشاهده کنید.

مثال زیر همانند مثال قبلی است با این تفاوت که عضو width از طریق همه توابع عضو کلاس SmallBox قابل دسترسی می‌باشد.

#include <iostream>
using namespace std;
 
class Box {
   protected:
      double width;
};
 
class SmallBox:Box { // SmallBox is the derived class.
   public:
      void setSmallWidth( double wid );
      double getSmallWidth( void );
};
 
// Member functions of child class
double SmallBox::getSmallWidth(void) {
   return width ;
}
 
void SmallBox::setSmallWidth( double wid ) {
   width = wid;
}
 
// Main function for the program
int main() {
   SmallBox box;
 
   // set box width using member function
   box.setSmallWidth(5.0);
   cout << "Width of box : "<< box.getSmallWidth() << endl;
 
   return 0;
}

با اجرای این کد خروجی زیر حاصل می‌شود.

Width of box : 5

منبع: ترجمه از سایت tutorialspoint.com

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *