ahmed.o.mohamed

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

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

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <iostream>
using namespace std;

class erreur {
public:
int num;
};

class erreur_d : public erreur {
public:
int code;
};

class A {
public:

A(int n) {
if (n == 1) {
erreur_d erd;
erd.num = 999;
erd.code = 12;
throw erd;
}
}
};

int main() {
try {
A a(1);
cout << "apres creation a(1)" << endl;
} catch (erreur er) {
cout << "exception erreur : " << er.num << endl;
} catch (erreur_d erd) {
cout << "exception erreur_d : " << erd.num << " " << erd.code << endl;
}

cout << "suite" << endl;

try {
A b(1);
cout << "apres creation b(1)" << endl;
} catch (erreur_d erd) {
cout << "exception erreur_d : " << erd.num << " " << erd.code << endl;
} catch (erreur er) {
cout << "exception erreur : " << er.num << endl;
}

return 0;
}

علل إجابتك.

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

0

شارك هذا الرد


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

لست بارعاً في الوراثة ولكن وحسب القاعدة الأساسية في الوراثة : الابن "هو" الأب ...فعند رمي كائن من الابن فهو كائن من الأب أيضاً ...

أي أن كل العبارات ستتحقق ولكن الcatch التي ستأتي أولاً ستنفذ ولن تنفذ الcatch الثانية(هذا مع قلة تعاملي مع الاستثناءات)

وستكون مخرجات الكود ..

apres creation a(1)
exception erreur : 999
suite
apres creation b(1)
exception erreur_d : 999 12

والحمد لله رب العالمين

0

شارك هذا الرد


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

apres creation a(1)
exception erreur : 999
suite
apres creation b(1)
exception erreur_d : 999

مجرد تخمين, فو نفس تفسير مصطفى :lol:

0

شارك هذا الرد


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

المُخرجات الصحيحة هي :

exception erreur : 999

suite

exception erreur_d : 999 12

في الــ bloc الأول التابع لــ try, إنشاء الكائن a(1) نتج عنه استثناء من نوع erreur_d.

قيمة num و code (التابعتان لــ erd) هما على التوالي 999 و 12.

الــ catch الأولى مناسبة لأن erreur عبارة عن basic type من erreur_d و هذا ما يُفسر عدم ظهور قيمة الــ code في المرة الأولى.

في الــ bloc الثاني التابع لــ try, توجد نفس الــ catch لكن بصورة عكسية. الإستثناء الذي نتج عن إنشاء b تتم معالجته من طرف الــ catch المناسب, في هذه الحالة ستظهر قيمة الــ code.

0

شارك هذا الرد


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

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

يُغلق.

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

0

شارك هذا الرد


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

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

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