ahmed.o.mohamed

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

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

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لتكن الفئة point معرفة كالآتي : (لم أضع تعريف دالة البناء)

class point {
int x, y;
public:
point(int = 0, int = 0);
friend int operator ==(point, point);
};

int operator ==(point a, point b) {
return a.x == b.x && a.y == b.y;
}

و لتكن الفئة pointcol مُشتقة من point :

class pointcol : public point {
int cl;
public:
pointcol(int = 0, int = 0, int = 0);
// éventuelles fonctions membre
};

a. إذا كان a و b من نوع pointcol و p من نوع point, هل الأوامر التالية صحيحة ؟ ماذا تفعل ؟

if (a == b) ... // instruction 1
if (a == p) ... // instruction 2
if (p == a) ... // instruction 3
if (a == 5) ... // instruction 4
if (5 == a) ... // instruction 5

b. نفس السؤال باعتبار أنه تم تعريف المؤثر + داخل الفئة point كدالة عضو (member function).

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

2

شارك هذا الرد


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

مجرد محاولة/

a.

العمليات 1, 2, 3 خاطئة لأن + لا يمكنها الوصول الى العناصر الخاصة لـ pointcol

4 و 5 صحيح, مقارنة عادية, صحيح اذا كان a.x يساوي 5 و x.b معدوم

b.

في هذه الحالة, العمليات 1, 2, 3 و 4 كلها صحيحة, العملية 5 خاطئة

0

شارك هذا الرد


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

a. الأوامر الخمسة صحيحة :)

بشكل عام, يتم تفسير x == y هكذا : operator == (x, y).

إذا كان x و y من نوع point فلا داعي للشرح لأن الأمور ستجري على ما يُرام.

إذا كان أحد معاملي المؤثر == من نوع pointcol (أو كلاهما), سيتم التحويل ضمنيا إلى النوع point.

إذا كان أحد معاملي المؤثر == من نوع int, سيتم التحويل ضمنيا إلى النوع point عن طريق استدعاء دالة البناء بوسيط واحد.

بالنسبة لمعنى المقارنة, إذا كان الكائن من نوع pointcol سيتم إجراء المقارنة بين إحداثيات النقطة. و إذا كان العدد صحيح سيتم اعتباره كائنا من نوع point يملك العدد الصحيح كترتيب و الفاصلة ستكون معدومة.

b. هذه المرة سيتم تفسير x == y هكذا : x.operator == (y).

إذا كان x من نوع point و y من نوع يمكن تحويله إلى point فلا توجد مشكلة في هذه الحالة (هذا الكلام ينطبق على العبارة الثالثة).

إذا كان x من نوع pointcol و y من نوع يمكن تحويله إلى point, فالعبارة صحيحة لأن الدالة operator == المشتقة من point يمكن دائما تطبيقها على كائنات من توع point. (هذا الكلام ينطبق على العبارة الأولى, الثانية, الرابعة)

إذا كان x من نوع int, فلا يمكن تمريره لإحدى الدوال الأعضاء, و بالتالي سيتم إظهار خطأ في الترجمة أثناء تصريف البرنامج. (و هذا ما حدث في العبارة الأخيرة)

0

شارك هذا الرد


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

تم منح النقاط للمشاركات المفيدة و حذف الردود الغير مفيدة, حفاظا على تنسيق الموضوع.

يُغلق.

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

0

شارك هذا الرد


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

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

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