C++الدالة الصديقة
- مفهوم الدالة الصديقة في C++
- مثال شامل حول تعريف دالة صديقة في C++
مفهوم الدالة الصديقة في C++
الدالة الصديقة ( Friend Function ) عبارة عن دالة يمكنها الوصول لأي شيء يملكه الكائن حتى إن كان في الكلاس نوعه private
أو protected
.
شروط تعريف دالة صديقة
- أن يتم وضع شكل الدالة ( Prototype ) فقط بداخل الكلاس و محتواها ( Body ) خارج الكلاس.
- عند وضع شكل الدالة بداخل الكلاس يجب أن تذكر الكلمة
friend
و لكن لا يجب أن تذكرها عندما تكتب محتوى الدالة خارج الكلاس. - في الكلاس لا يهم المكان الذي تقوم فيه بوضع شكل الدالة ( Prototype ), أي لا يهم إن جعلتها
public
أوprivate
أوprotected
. - محتوى الدالة ( Function Body ) يجب تعريفه خارج الكلاس.
- أن تكون الدالة تملك باراميتر عبارة عن كائن من الكلاس الذي تنوي الوصول لأي شيء موجود فيه.
مثال شامل حول تعريف دالة صديقة في C++
في المثال التالي, قمنا بتعريف كلاس إسمه Demo
يحتوي على 4 متغيرات كل واحد منهم له Modifier مختلف.
بعدها قمنا بتعريف دالة صديقة إسمها printValues
عند استدعاءها نمرر لها كائن من الكلاس Demo
فتقوم بطباعة قيمه بشكل مرتب.
في الأخير قمنا بإنشاء كائن من Demo
و إعطاؤه قيم, و من ثم إستدعاء الدالة printValues()
منه حتى تقوم بطباعة قيمه.
مثال
using namespace std; // يحتوي على 4 متغيرات و دالة صديقة Demo هنا قمنا بتعريف كلاس إسمه class Demo { // printValues هنا قمنا بتعريف شكل الدالة الصديقة friend void printValues(Demo demo); int a = 1; public: int b = 2; private: int c = 3; protected: int d = 4; }; // في أولها friend و لاحظ أننا لم نضع الكلمة printValues هنا قمنا بتعريف محتوى الدالة الصديقة void printValues(Demo demo) { cout << "a = " << demo.a << "\n"; cout << "b = " << demo.b << "\n"; cout << "c = " << demo.c << "\n"; cout << "d = " << demo.d << "\n"; } // main() هنا قمنا بتعريف الدالة int main() { // demo إسمه Demo هنا قمنا بتعريف كائن من Demo demo; // لها حتى تقوم بطباعة القيم الموجودة فيه demo و تمرير الكائن printValues() هنا قمنا باستدعاء الدالة printValues(demo); return 0; }
سنحصل على النتيجة التالية عند التشغيل.
a = 1 b = 2 c = 3 d = 4