الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه Snack3r في 13 سبتمبر 2012 · 3 رد · 586 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

أجزاء هذه الحلقة ستكون خاصة بمسائل الــ 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
#2

مجرد محاولة/

a.

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

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

b.

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

[سبحان الله و بحمده, سبحان الله العظيم]

#3

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, فلا يمكن تمريره لإحدى الدوال الأعضاء, و بالتالي سيتم إظهار خطأ في الترجمة أثناء تصريف البرنامج. (و هذا ما حدث في العبارة الأخيرة)

#4

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

يُغلق.

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

هذا الموضوع مغلق.

مواضيع مشابهة