Reklama

استخدام الاستثناءات في C++

الاستثناءات تسمى الحالة الشاذة, تحدث أثناء تنفيذ البرنامج: عدم القدرة على فتح ملف أو الحصول على الكمية الضرورية من الذاكرة, استخدام خارج الحدود مؤشر صفيف. التعامل مع هذا النوع من الاستثناءات, وكقاعدة, مندمجة بطريقة سيئة الرئيسية خوارزمية البرنامج, و المبرمجين تضطر إلى ابتكار طرق مختلفة بشكل صحيح التعامل مع الاستثناءات, يحاول في نفس الوقت لا تعقيد البرنامج عن طريق إضافة جميع أنواع الشيكات و فروع إضافية من الخوارزمية.
توفر لغة++ C القياسية طريقة الرد على الاستثناءات. بفضل يرجع في جزء منفصل من رمز البرنامج, مسؤولة عن التحقق من صحة و معالجة الأخطاء, يسهل تصور برنامج نص ويقلل من حجمه. زي الجملة وأسلوب معالجة الاستثناء يمكن, ومع ذلك, تتكيف مع مختلف الاحتياجات والطلبات.
آلية استثناء ينقسم إلى قسمين رئيسيين:
وجهة البرنامج, الذي حدث استثناء. تعريف حقيقة, أنه في اتخاذ أي خطأ, ويستتبع الشهوة استثناءات. فعل هذا في C++ يوفر خاص مشغل رمي. الإثارة من الاستثناءات في حالة استحالة الوصول إلى بعض الملفات هي على النحو التالي:

البرنامج, التي تتم معالجة الاستثناء. عندما متحمس استثناء طبيعي تنفيذ البرنامج يعلق و التحكم يتم تمريرها إلى معالج الاستثناء. العثور على حق المعالج غالبا ما يشمل تعزيز ما يسمى الاستدعاءات البرنامج. بعد أن تتم معالجة الاستثناء تنفيذ البرنامج السير الذاتية, ولكن ليس من المكان, حيث حدث الاستثناء, و من وجهة, عقب معالج. تعريف معالج الاستثناء في C++ يستخدم الكلمة القبض. قد تبدو مثل معالج المثال من الفقرة السابقة:

كل الصيد معالج المرتبطة استثناء, تحدث في وحدة المشغلين, التي تسبق مباشرة المعالج ، المفتاحية keyword محاولة. واحد حاول بلوك عدد قليل يمكن أن تتطابق الصيد-الجمل, كل منها يشير إلى نوع معين من استثناء. هنا مثال:

في هذا المثال في الجسم وظيفة احصائيات() ثلاث شركات المغلقة في حاول بلوك, وأربعة لا. هذه أربع جهات قادرة على أن تثير اثنين من الاستثناءات.

تنفيذ المشغل الجديد قد تفشل. معيار مكتبة C++ ينص على بدء استثناء bad_alloc في حالة استحالة تخصيص كمية مناسبة من الذاكرة. لأن العينة لم يتم توفير معالج استثناء bad_alloc, الطول الموجي تنفيذ البرنامج سوف تفشل.

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

وتجدر الإشارة إلى, ما, على الرغم من أن المشغل قد يؤدي إلى القسمة على صفر, معيار المكتبة لا توفر نوع من الاستثناء.
ننتقل الآن إلى تعليمات, في المتحدة حاول بلوك. إذا كان واحد يسمى في وظيفة كتلة sum_it(), min_val() أو max_val() –حدوث استثناء, التحكم سيتم تمريرها إلى معالج, عقب محاولة بلوك اعتراض هذا الاستثناء. لا دليل, بتحريض استثناء, ولا اتباع التعليمات في حاول بلوك لن يتم تنفيذ. تخيل, أنه عند استدعاء الدالة sum_it() بدأ استثناء:

وظيفة sum_it() توقف, مشغلي, التالية في كتلة المحاولة عن طريق استدعاء هذه الدالة, تفشل, و pstats[0] لا يمكن تهيئة. بدلا من ذلك, متحمس استثنائية شرط ويستكشف اثنين القبض معالج. في حالتنا, صيد مع معلمة من نوع سلسلة:

بعد إعدام التحكم سوف يكون عاد إلى التدريس, بعد آخر القبض معالج, تتعلق هذه حاول بلوك.

في حالة (بالطبع, المعالج نفسه قد تبدأ الاستثناءات, بما في ذلك نفس النوع. في مثل هذه الحالة ستستمر في تنفيذ الصيد-الجمل, المحددة في برنامج, تسمى دالة احصائيات().)
هنا مثال:

في هذه الحالة الإعدام يعود إلى وظيفة, تسبب احصائيات(). نفترض, المطور من البرنامج قدم الشيك يتم إرجاعها بواسطة الدالة احصائيات() والقيم الرد الصحيح على قيمة صفر.
وظيفة احصائيات() قادرة على الاستجابة نوعان من الاستثناءات: سلسلة و statsException. مع استبعاد أي نوع آخر يتم تجاهل, و التحكم يتم تمريرها إلى وظيفة دعا, و إذا لم يتم العثور على معالج, في وظيفة أعلى مستوى, لذا فإن الوظيفة الرئيسية().في غياب معالج و هناك, البرنامج سوف تعطل.
يمكنك تحديد الخاصة معالج, يستجيب إلى أي نوع من أنواع الاستثناء ، . أعماله بناء الجملة كما يلي:

Reklama