C++ Access Specifiers

در ++C برای کنترل سطح دسترسی اعضای کلاس (خصوصیات و توابع) از Access Specifiers (مشخص‌کننده‌های دسترسی) استفاده می‌شود.

این مشخص‌کننده‌ها تعیین می‌کنند که چه کسی می‌تواند به متغیرها یا متدهای کلاس دسترسی داشته باشد.

🔑 انواع Access Specifier

1️⃣ public

  • اعضا در هرجای برنامه قابل دسترسی هستند.

  • بیرون از کلاس و درون کلاس یا کلاس‌های فرزند قابل استفاده‌اند.

#include <iostream> using namespace std; class MyClass { public: int x; // عمومی }; int main() { MyClass obj; obj.x = 10; // ✅ دسترسی مستقیم cout << obj.x; // ✅ دسترسی مستقیم return 0; }

2️⃣ private (پیش‌فرض کلاس‌ها)

  • اعضا فقط درون همان کلاس قابل دسترسی هستند.

  • بیرون از کلاس و حتی در کلاس‌های فرزند مستقیم نمی‌شود به آن‌ها دسترسی داشت.

  • برای کار با اعضای private معمولاً تابع‌های public (Getter/Setter) تعریف می‌کنیم.

#include <iostream> using namespace std; class MyClass { private: int secret; // خصوصی public: void setSecret(int s) { secret = s; } int getSecret() { return secret; } }; int main() { MyClass obj; // obj.secret = 10; // ❌ خطا: private است obj.setSecret(10); // ✅ cout << obj.getSecret(); return 0; }

3️⃣ protected

  • شبیه private است، اما:

  • کلاس‌های فرزند (Derived Class) می‌توانند به اعضای protected کلاس والد دسترسی داشته باشند.

  • بیرون از سلسله‌مراتب ارث‌بری قابل دسترسی نیست.

#include <iostream> using namespace std; class Base { protected: int value; }; class Derived : public Base { public: void setValue(int v) { value = v; // ✅ چون protected است } int getValue() { return value; } }; int main() { Derived d; d.setValue(42); cout << d.getValue(); // d.value = 10; // ❌ خطا: بیرون از کلاس فرزند return 0; }

🏷️ جدول خلاصه

Specifierدرون کلاسکلاس فرزندبیرون از کلاس
public
protected
private

✅ نکات مهم

  • پیش‌فرض برای کلاس‌ها: private

  • پیش‌فرض برای struct در C++: public

  • Encapsulation (کپسوله‌سازی) معمولاً با private و توابع public انجام می‌شود.

💡 جمع‌بندی

  • public: برای اعضایی که باید همه جا در دسترس باشند.

  • private: برای اطلاعات حساس و جزئیات داخلی.

  • protected: برای وقتی که می‌خواهید فرزندان به اعضا دسترسی داشته باشند ولی بقیه نه.