سطح دسترسی ها در سی پلاس پلاس (Access Modifiers)

در این قسمت تیم کدگیت را با آموزش سطح دسترسی ها در سی پلاس پلاس همراهی کنید. در ابتدا Data hiding را معرفی سپس با معرفی انواع سطح دسترسی، مثال‌هایی از آنها پیاده سازی می‌کنیم. پیش نیاز این آموزش شامل موارد زیر است:

  1. شی گرایی در سی پلاس پلاس
  2. ارث بری در سی پلاس پلاس
  3. توابع در سی پلاس پلاس

سطح دسترسی ها در سی پلاس پلاس

سطح درسترسی‌ها باعث ایجاد یکی از ویژگی‌های مهم شی گرایی می‌شود. این ویژگی را Data Hiding می‌گویند. یک مثال واقعی را در نظر می‌گیریم. فرض کنید یک راننده ترمز خود را فشار دهد چه اتفاقی خواهد افتاد؟ ماشین متوقف می‌شود!! راننده برای اینکه ماشین متوقف شود می‌داند که باید ترمز بگیرد اما آیا اتفاقی که واقعا رخ می‌دهد این است؟ راننده آگاهی ندارد که درون موتور ماشین چه اتفاقی می‌افتد تا ماشین متوقف شود و حتی چگونگی اتصال موتورها به چرخ‌ها و …. خبر ندارد. این دقیقا چیزی است که در Data Hiding رخ می‌دهد.

برای پیاده سازی Data Hiding باید با انواع سطح دسترسی ها در سی پلاس پلاس آشنا شویم:

  1. Public
  2. Private
  3. Protected

Public

تمام اعضای کلاسی که در زیر کلمه کلیدی Public: قرار می‌گیرند قابل دسترسی برای تمام کلاس‌های دیگر هستند. تمامی متغیر‌های عمومی و توابع که Public هستند را می‌توان از کلاس‌های دیگر صدا زد. برای درک بهتر این مسئله، کد زیر را ببینید:

همانطور که در کد بالا می‌بینید کلاسی به نام PublicCircle است که برای محاسبه مساحت دایره نوشتیم. در این کلاس متغیر Radius و تابع compute_area به صورت Public هستند و توسط تابع Main قابل دسترسی بوده و توانسته‌ایم به راحتی آنها را صدا بزنیم.

Private

تمامی متغیرها و توابعی که به صورت Private درون یک کلاس تعریف می‌شوند نمی‌توان از کلاس‌های دیگر به صورت مستقیم به آنها دسترسی داشت (البته Friend Function استثنا هستند). کد مثال دایره را به صورت Private ببینید:

کد بالا موقع کامپایل ارور خواهد داد. دلیل آن استفاده از متغیر Private در تابعی خارج از کلاس PrivateCircle است. در تابع Main ما متغیر radius را صدا زدیم که به صورت Private است و نمی‌توان به آن دسترسی داشت. برای اجرای برنامه باید تغییرات زیر را اعمال کنیم:

Protected

آخرین سطح دسترسی ها در سی پلاس پلاس Protected است. این سطح دسترسی شبیه به Private است با این تفاوت که کلاس‌هایی که از کلاس ما ارث بری می‌کنند نیز می‌توانند توابع و متغیر‌های ما را صدا بزنند. اما کلاس‌های دیگر نمی‌توانند به متغیر‌ها و توابع Protected دسترسی داشته باشند. مثال زیر را در همین مورد ببینید:

یک کلاس به نام Parent داریم که متغیری به نام id_protected دارد و به صورت Protected تعریف شده است. ما کلاسی به نام Child تعریف کردیم که فرزند کلاس Parent است. در کلاس Child ما به متغیر id_protected دسترسی داشته و آن را چاپ کردیم. دقت کنید از تابع Main به صورت مستقیم نمی‌توانیم به متغیر id_protected دسترسی پیدا کنیم.

پسورد: www.codegate.ir

 

دسته : Object Oriented in Cpp, آموزش ++c, زبان c++, َشی گرایی در سی پلاس پلاس

دیدگاه بگذارید

نظر شما چیست؟

مطلع کردن شما از
avatar

wpDiscuz