** الأصناف الصديقة Friend Classes :
تعريف : هو عبارة عن صنف تستطيع كل دواله الأعضاء أن تستخدم خصائص الصنف الآخر
- وللتصريح عن الصنف الصديق : نستخدم الكلمة المفتاحية friend مثلاً لجعل الصنف tow صديق للصنف one نكتب العبارة التالية :
- وللتصريح عن الصنف الصديق : نستخدم الكلمة المفتاحية friend مثلاً لجعل الصنف tow صديق للصنف one نكتب العبارة التالية :
كود
Friend class tow
Friend class tow
داخل الصنف one .
ملاحظات :
1- يمكن التصريح عن الصنف الصديق بأي موضع داخل الآخر .
2- علاقة الصداقة ليست تناظرية ، بمعنى إذا كان الصنف A صديق للصنف B فهذا لا يعني أن الصنف B صديق للصنف A .
3- علاقة الصداقة ليست متعدية ، بمعنى إذا كان الصنف A صديق للصنف B والصنف B صديق للصنف C فهذا لا يعني أن الصنف A صديق للصنف C .
ملاحظات :
1- يمكن التصريح عن الصنف الصديق بأي موضع داخل الآخر .
2- علاقة الصداقة ليست تناظرية ، بمعنى إذا كان الصنف A صديق للصنف B فهذا لا يعني أن الصنف B صديق للصنف A .
3- علاقة الصداقة ليست متعدية ، بمعنى إذا كان الصنف A صديق للصنف B والصنف B صديق للصنف C فهذا لا يعني أن الصنف A صديق للصنف C .
مثال توضيحي :
كود
//تعريف للصنف فقط دون كتابة اي تفاصيل له
class a;
class b
{
/*
كافة التفاصيل الخاصة بالـ class b
*/
//تعريف للصنف فقط دون كتابة اي تفاصيل له
class a;
class b
{
/*
كافة التفاصيل الخاصة بالـ class b
*/
صنْف صديق
',CAPTION,'Friend Class',WRAP, TEXTFONTCLASS,'myText','purple');" onmouseout=nd(); href=""Friend Class a;
}
class a
{
/*
كافة التفاصيل الخاصة بالـ class a
*/
** مثال : برنامج يستخدم الأصناف الصديقة ، ويقوم بإيجاد الوسط الحسابي لـ N من الأعداد الحقيقية المدخلة من قبل المستخدم .بحيث
* الصنف الأول يستخدم لـ ( إدخال الأعداد ثم اثجاد مجموعها والذي نسميه بـ summation ).
* الصنف الثاني يستخدم المعلومات الموجودة في الصنف الأول summation ومن ثم إيجاد الوسط الحسابي والذي نسميه بـ mean ::..
}
class a
{
/*
كافة التفاصيل الخاصة بالـ class a
*/
** مثال : برنامج يستخدم الأصناف الصديقة ، ويقوم بإيجاد الوسط الحسابي لـ N من الأعداد الحقيقية المدخلة من قبل المستخدم .بحيث
* الصنف الأول يستخدم لـ ( إدخال الأعداد ثم اثجاد مجموعها والذي نسميه بـ summation ).
* الصنف الثاني يستخدم المعلومات الموجودة في الصنف الأول summation ومن ثم إيجاد الوسط الحسابي والذي نسميه بـ mean ::..
كود
#include
#include
using
#include
#include
using
حيّز الأسماء
',CAPTION,'Namespace',WRAP, TEXTFONTCLASS,'myText','purple');" onmouseout=nd(); href=""Namespace std;
//تعريف الصنف الصديق أولاً
class mean;
class summation
{
//تم هنا تعريف الصنف الصديف داخل الصنف
//تعريف الصنف الصديق أولاً
class mean;
class summation
{
//تم هنا تعريف الصنف الصديف داخل الصنف
صنْف صديق
',CAPTION,'Friend Class',WRAP, TEXTFONTCLASS,'myText','purple');" onmouseout=nd(); href=""Friend Class mean;
private:
//المتغير الذي يحدد عدد الاعداد المدخلة من قبل المستخدم
int n;
float x,sum;
public:
//داله بناء
summation()
{sum=0;
cout<<"Enter n :"< cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"Enter x ["<cin>>x;
sum+=x;
}
cout<<"Summation="< }};
class mean
{
private :
// متغير عدد حقيقي لتخزين المتوسط
float s;
public:
//لاحظ هنا الدالة لها وسيطة من نوع الكائن الصديق
//من خلالة يتم الوصول لكافة الأعضاء الموجودة بداخله مثل مجموع الاعداد
mean(summation ss)
{
s=ss.sum/ss.n;
cout<<"Mean = "<}};
int main()
{
//يتم هنا استدعاء دالة البناء مباشرة
summation s;
//لاحظ هنا الوسيطة هي الكائن s
//لانه يحتفظ بكافة العمليات التي اجريناها
mean m(s);
system("PAUSE");
return 0;
}
private:
//المتغير الذي يحدد عدد الاعداد المدخلة من قبل المستخدم
int n;
float x,sum;
public:
//داله بناء
summation()
{sum=0;
cout<<"Enter n :"<
for(int i=1;i<=n;i++)
{
cout<<"Enter x ["<cin>>x;
sum+=x;
}
cout<<"Summation="<
class mean
{
private :
// متغير عدد حقيقي لتخزين المتوسط
float s;
public:
//لاحظ هنا الدالة لها وسيطة من نوع الكائن الصديق
//من خلالة يتم الوصول لكافة الأعضاء الموجودة بداخله مثل مجموع الاعداد
mean(summation ss)
{
s=ss.sum/ss.n;
cout<<"Mean = "<
int main()
{
//يتم هنا استدعاء دالة البناء مباشرة
summation s;
//لاحظ هنا الوسيطة هي الكائن s
//لانه يحتفظ بكافة العمليات التي اجريناها
mean m(s);
system("PAUSE");
return 0;
}