ahmed.o.mohamed

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

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

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإختبار الرابع (الجزء الثامن عشر) :

لتكن لدينا الفئتان erreur و A المعرفتان كما يلي :

class erreur {
public:
int num;
};

class A {
public:

A(int n) {
if (n == 1) {
erreur er;
er.num = 999;
throw er;
}
}
};

ما هي مُخرجات الكود التالي :

#include <iostream>
using namespace std;

int main() {
void f();

try {
f();
} catch (erreur er) {
cout << "dans main : " << er.num << endl;
}
cout << "suite main" << endl;

return 0;
}

void f() {
try {
A a(1);
} catch (erreur er) {
cout << "dans f : " << er.num << endl;
}
cout << "suite f" << endl;
}

نفس السؤال السابق اذا استبدلنا تعريف f بــ :

  1. void f() {
    try {
    A a(1);
    } catch (erreur er) {
    cout << "dans f : " << er.num << endl;
    return;
    }
    cout << "suite f" << endl;
    }


  2. void f() {
    A a(1);
    }

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

0

شارك هذا الرد


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

الكود الأول

dans f : 999
suite f
suite main

الكود الثاني

dans f : 999
suite main

الكود الثالث

dans main : 999
suite main

0

شارك هذا الرد


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

1.

dans f : 999

suite f

suite main

تتم معالجة الإستثناء الناتج عن إنشاء a(1) في f بالــ catch(erreur) التابع لــ try الموجودة في نفس الدالة.

بعد ذلك ينتقل التنفيذ إلى إظهار الجملة "suite f" ثم يعود التنفيذ مرة أخرى إلى الدالة الرئيسية و هنا تتم طباعة الجملة "suite main".

ملاحظة : في هذه الحالة, الــ try الموجودة داخل الــ main لن يكون لها دور.

2.

dans f : 999

suite main

نفس الفكرة السابقة, إلا أنه في هذه الحالة ستتم العودة من الدالة f قبل طباعة العبارة "suite f" لينتقل التنفيذ إلى الدالة الرئيسية و بالتالي ستتم طباعة "suite main".

3.

dans main : 999

suite main

في هذه الحالة, إنشاء a(1) في f لا يظهر في بلوك try و بالتالي سيتم البحث عن أقرب catch (مناسب) من استدعاء الدالة f.

0

شارك هذا الرد


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

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

يُغلق.

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

0

شارك هذا الرد


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

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

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