ahmed.o.mohamed

اختبر قدراتك في C/CPP - الحلقة الرابعة, الجزء السادس

4 ردود في هذا الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

الحلقة الثالثة - الجزء الثالث.

الحلقة الثالثة - الجزء الرابع.

الحلقة الثالثة - الجزء الخامس و الأخير.

الحلقة الرابعة - الجزء الأول.

الحلقة الرابعة - الجزء الثاني.

الحلقة الرابعة - الجزء الثالث.

الحلقة الرابعة - الجزء الرابع.

الحلقة الرابعة - الجزء الخامس.

مرحبا بكم إخوتي الكرام في الجزء السادس من الحلقة الرابعة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الرابعة إلى عدة أجزاء, مُرتبة حسب الصعوبة.

أجزاء هذه الحلقة ستكون خاصة بمسائل الــ OOP.

الإختبار الرابع (الجزء السادس) :

1. خمن مُخرجات الكود التالي : (يُمنع استخدام الــ Compiler)

#include <iostream>
using namespace std;

class point {
int x, y;
public:

point(int abs = 0, int ord = 0) // constructeur 0, 1 ou 2 arguments
{
x = abs;
y = ord;
cout << "$$ construction point : " << x << " " << y << endl;
}
friend point operator +(point, point); // point + point --> point

void affiche() {
cout << "Coordonnées : " << x << " " << y << endl;
}
};

point operator+(point a, point b) {
point r;
r.x = a.x + b.x;
r.y = a.y + b.y;
return r;
}

int main() {
point a, b(2, 4);

a = b + 6; // affectation 1
a.affiche();

a = 6 + b; // affectation 2
b.affiche();

return 0;
}

2. نفس السؤال باعتبار أنه تمت إعادة تعريف المؤثر + كدالة عضو (Member function) و ليس دالة صديقة (Friend function) ؟

3. نفس السؤال باعتبار أنه تمت إعادة تعريف المؤثر + هكذا :

friend point operator + (point &, point &) ;

4. نفس السؤال باعتبار أنه تمت إعادة تعريف المؤثر + هكذا :

friend point operator + (const point &, const point &) ;

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1- المخرجات

$$ construction point : 0 0

$$ construction point : 2 4

Coordonnées : 8 4

Coordonnées : 8 4

أظن ان بقية الحالات نفس المخرجات

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

a. تبسيط العبارة b + 6 يحدث باستخدام المؤثر + الذي تمت إعادة تعريفه في الفئة point, يتم إسناد ناتج العبارة إلى a بعد تحويل العدد 6 إلى كائن من نوع point عن طريق استدعاء دالة البناء بوسيط واحد مما يعني أن الوسيط الثاني سيحتفظ بقيمته الإفتراضية.

العبارة الثانية يتم التعامل معها أيضا بنفس الطريقة السابقة (تحويل 6 إلى point).

في النهاية, سنحصل على المُخرجات التالية :

$$ construction point : 0 0

$$ construction point : 2 4

$$ construction point : 6 0

$$ construction point : 0 0

Coordonnées : 8 4

$$ construction point : 6 0

$$ construction point : 0 0

Coordonnées : 2 4

b. من ناحية أخرى, إذا أُعيد تعريف المؤثر + كدالة عضو, سيتم رفض العبارة الثانية أثناء ترجمة البرنامج, لأنه سيتم تفسيرها هكذا :

.operator + (b)

و بالتالي نلاحظ أن الدالة الصديقة هي الوحيدة التي يمكنها معالجة المعاملات الموجودة على طرفي مؤثر الجمع خصوصاً فيما يتعلق بالتحويل الضمني بين الأنواع.

c. الإرسال بالمرجع يتطلب أن يكون الوسيط المُرسل من نفس نوع الوسيط الأصلي للدالة و هذا ما لم يحصل, و بالتالي ستحدث أخطاء في ترجمة العبارتين أثناء تصريف البرنامج.

d. وجود const يسمح للمترجم بإرسال كائنات مؤقتة إلى الدالة operator +, يتم الحصول على الكائنات المؤقتة عن طريق عدة تحويلات للوسائط المُرسلة. و بالتالي العبارة الأولى و الثانية صحيحتان.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تم منح النقاط للمشاركات المفيدة.

يُغلق.

أراكم في الجزء السابع من الحلقة الرابعة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .