C++ The Friend Keyword
کلمهی کلیدی friend به شما اجازه میدهد کلاس یا تابعی را مشخص کنید که بتواند به اعضای private و protected یک کلاس دسترسی مستقیم داشته باشد.
معمولاً اعضای private فقط از داخل خود کلاس قابل دسترسیاند، اما با friend میتوانیم استثنا قائل شویم.
🎯 کاربردهای اصلی
-
اجازهی دسترسی یک تابع عادی (خارج از کلاس) به دادههای خصوصی کلاس.
-
اجازهی دسترسی کلاس دیگر به دادههای خصوصی کلاس.
-
وقتی لازم است چند کلاس یا تابع، به صورت نزدیک با هم کار کنند.
🟢 1. تابع دوست (Friend Function)
یک تابع عادی را میتوان بهعنوان دوست یک کلاس تعریف کرد تا به اعضای private آن دسترسی داشته باشد.
📌 خروجی:
🟢 2. کلاس دوست (Friend Class)
یک کلاس کامل را میتوان دوست کلاس دیگر کرد تا تمام توابع آن کلاس به اعضای private/protected کلاس دوستشده دسترسی داشته باشند.
📌 خروجی:
🟢 3. دوست کردن تابع عضو کلاس دیگر
میتوان یک تابع خاص از کلاس دیگر را به عنوان دوست معرفی کرد:
🏷️ نکات مهم
-
friendقوانین OOP را نقض نمیکند بلکه یک استثنای کنترلشده است. -
دوستی وارثی (inherited) نیست؛ اگر B دوست A باشد، فرزند B خودکار دوست A نمیشود.
-
دوستی دوطرفه نیست؛ اگر A دوست B باشد، B خودکار دوست A نیست (باید جداگانه تعریف شود).
-
بهتر است فقط در صورت نیاز واقعی استفاده شود تا اصل کپسولهسازی (Encapsulation) حفظ شود.
✅ خلاصه
| ویژگی | توضیح |
|---|---|
friend function | تابع غیرعضو که میتواند به private/protected دسترسی داشته باشد |
friend class | همهٔ توابع یک کلاس میتوانند به private/protected کلاس دیگر دسترسی پیدا کنند |
| وراثت دوستی | به ارث نمیرسد |
| دوطرفه بودن | دوستی یکطرفه است |
نتیجه:
friendراهی است برای ایجاد همکاری نزدیک بین کلاسها یا توابع بدون شکستن کامل اصل مخفیسازی، اما باید با دقت استفاده شود تا ساختار کد شلوغ و ناامن نشود.
HTML
Tailwind Css
Bootstrap 5
Java script
++C
Python
Three.js
Gsap
Sass
SQL
React