مخفیسازی داده یکی از مهمترین ویژگیهای برنامهنویسی شیگرا میباشد که توابع برنامه را از دسترسی مستقیم به عناصر داخلی یک کلاس منع میکند. این منع دسترسی بوسیله بخشهای برچسب دار درون بدنه کلاس انجام میگیرد. این برچسبها 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 را دارند.
به صورت پیشفرض، همه اعضای یک کلاس 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 است اما با این مزیت که میتوان به آنها، از طریق کلاسهای فرزند مشتق شده دسترسی یافت.
کلاسهای مشتق شده و وراثت را در بخش بعدی یاد خواهید گرفت. مثال زیر را که در آن یک کلاس فرزند به نام 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
آموزش های مرتبط بیشتر
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.