يمكن أن ميزة صديق ما إذا كان استخدامها من قبل وظيفة أو فئة تأثير سلبي على إطار المنحى وجوه لأنها تضعف التغليف الذي هو ضد نموذج وجوه المنحى . هذا هو السبب في أنه يجب استخدام ميزة الصديق بحكمة وإلا فقد يؤدي ذلك إلى كسر إخفاء البيانات من الشفرة.
ميزة هذا الصديق ليست تبديلية ولا متعدية . X هو صديق Y لا يستنتج أن Y هو أيضًا صديق X. إذا كان X صديقًا لـ Y و Y هو صديق لـ Z ، لا يشير إلى أن X صديق Z.
رسم بياني للمقارنة
أساس للمقارنة | وظيفة الصديق | فئة الصديق |
---|---|---|
الأساسية | وهي دالة تستخدم مع كلمة مرور صديق لمنح إمكانية وصول غير عضو للأعضاء في الفصل الدراسي. | إنها فئة تستخدم مع كلمة مرور صديق للوصول إلى الأعضاء الخاصين في فصل آخر. |
الإعلان الأمامي | لابد من استخدامه. | ليس إلزاميا. |
استعمال | يمكن استخدام وظيفة الصديق في بعض حالات التحميل الزائد على المشغل. | يمكن استخدام فئة الصديق عندما يتم إنشاء فصل دراسي أعلى الفصل الدراسي الآخر. |
تعريف وظيفة الصديق
يتم استخدام وظيفة الصديق للوصول إلى أعضاء الفئة الخاصة والمحمية من خلال السماح للوظيفة غير الأعضاء بالوصول. في هذا النوع من الوظائف ، يتم استخدام الكلمة الأساسية لصديق قبل اسم الوظيفة في وقت الإعلان. هناك بعض الشروط التقييد المطبقة على وظيفة الصديق. الشرط الأول هو أن وظيفة الصديق غير موروثة بواسطة فئة فرعية. الشرط الثاني هو أن محدد فئة التخزين قد لا يكون موجودًا في وظيفة الصديق ، مما يعني أنه لا يمكن اعتباره ثابتًا أو خارجيًا.
لا يتم استدعاء الدالة friend مع كائن استدعاء للفئة. الأمثلة على وظيفة صديق هي: وظيفة عالمية ، وظيفة العضو من فئة ، يمكن أن يكون وظيفة قالب وظيفة صديق. دعونا نفهم ذلك بمساعدة مثال.
# include using namespace std؛ class first {int data؛ public: first (int i): data (i) {} friend void display (const first & a)؛ }؛ عرض الفراغ (const أولاً & a) {cout << "data =" <تعريف فئة الصديق
وكما هو الحال مع وظيفة الصديق ، يمكننا أن نجعل صفًا واحدًا ليصبح صديقًا لصف آخر يُشار إليه بصفته صديقًا . بحيث يمكن لفئة الصديق الوصول إلى أعضاء خاصين محددين داخل الفصل الآخر. من المهم أن تتذكر أن صف الصديق يمكنه فقط الوصول إلى الأسماء المحددة داخل الفئة الأخرى بدلاً من أن يرث فصلًا آخر. على وجه التحديد ، لا يمكن لأعضاء الطبقة الأولى أن يصبحوا أعضاء في صف الأصدقاء. نادرا ما تستخدم هذه الطبقات صديق.
يمكن الإعلان عن فئة الصديق في أكثر من فصل واحد. يعتبر بمثابة طريقة بديلة قصيرة لوظيفة الأصدقاء لأنه بمساعدة هذا يمكننا إنشاء فئة صديق يمكنها الوصول إلى أعضاء البيانات بالكامل والدالة بدلاً من إنشاء وظائف صداقة متعددة.
# include using namespace std؛ الطبقة الأولى {/ تصرح بفئة صديق صديق الدرجة الثانية؛ public: First (): a (0) {} باطلة print () {cout << "النتيجة هي" << a << endl؛ } private: int a؛ }؛ class second {public: void change (First & yclass، int x) {yclass.a = x؛ }}؛ int main () // Output النتيجة هي 0 النتيجة هي 5الاختلافات الرئيسية بين وظيفة الصديق وفئة صديق
- وظيفة الصديق هي وظيفة قادرة على الوصول إلى أعضاء الطبقة الخاصة والمحمية. وعلى النقيض من ذلك ، فإن صف الأصدقاء هو فصل يساعد في الوصول إلى الأعضاء في الفصل.
- يتم الإعلان عن وظيفة الصديق من خلال تضمين النموذج الأولي الخاص به داخل الفصل الدراسي ، ومن ثم يتم استدعاؤه باستخدام الكلمة الأساسية friend. وبالمثل ، يتم تعريف فئة الصديق أيضًا باستخدام الكلمة الأساسية friend.
- يستخدم الإعلان الأمامي في حالة عمل الصديق في مقابل ، ليس من الضروري استخدامه في فئة الصديق.
استنتاج
مطلوب وظيفة صديق عندما تحتاج وظيفة للوصول إلى فئتين مستقلتين أو أكثر ، وأعضاء الداخلية. من ناحية أخرى ، هناك حاجة إلى فئة صديق عندما يتطلب الفصل الوصول إلى أعضاء فئة أخرى. عندما تحتاج وظيفة عضو متعددة إلى أن تكون صديقاً لتلك الوظيفة ، في هذه الحالة ، من الأفضل استخدام فئة الصديق.