C++ الدالة الصديقة

مفهوم الدالة الصديقة في C++

الدالة الصديقة ( Friend Function ) عبارة عن دالة يمكنها الوصول لأي شيء يمكله الكائن حتى إن كان في الكلاس نوعه private أو protected.


شروط تعريف دالة صديقة

  • أن يتم وضع شكل الدالة ( Prototype ) فقط بداخل الكلاس و محتواها ( Body ) خارج الكلاس.
  • عند وضع شكل الدالة بداخل الكلاس يجب أن تذكر الكلمة friend و لكن لا يجب أن تذكرها عندما تكتب محتوى الدالة خارج الكلاس.
  • في الكلاس لا يهم المكان الذي تقوم فيه بوضع شكل الدالة ( Prototype ), أي لا يهم إن جعلتها public أو private أو protected.
  • محتوى الدالة ( Function Body ) يجب تعريفه خارج الكلاس.
  • أن تكون الدالة تملك باراميتر عبارة عن كائن من الكلاس الذي تنوي الوصول لأي شيء موجود فيه.

مثال شامل حول تعريف دالة صديقة في C++

في المثال التالي, قمنا بتعريف كلاس إسمه Demo يحتوي على 4 متغيرات كل واحد منهم له Modifier مختلف.
بعدها قمنا بتعريف دالة صديقة إسمها printValues عند استدعاءها نمرر لها كائن من الكلاس Demo فتقوم بطباعة قيمه بشكل مرتب.

في الأخير قمنا بإنشاء كائن من Demo و إعطاؤه قيم, و من ثم إستدعاء الدالة printValues() منه حتى تقوم بطباعة قيمه.

مثال

main.cpp
#include <iostream>

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
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة