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
راهی است برای ایجاد همکاری نزدیک بین کلاسها یا توابع بدون شکستن کامل اصل مخفیسازی، اما باید با دقت استفاده شود تا ساختار کد شلوغ و ناامن نشود.