توفر لنا لغة C++ آلية منظمة وأكثر أناقة للتعامل مع الاستثناءات . يمكن لهذه الآلية المنظمة فصل التعليمات البرمجية التي يتم تنفيذها بشكل طبيعي وأجزاء معالجة الاستثناءات في البرنامج، مما يجعل البرنامج أكثر وضوحًا وأسهل في القراءة.
بعد ذلك، دعونا نلقي نظرة على بنية معالجة الاستثناءات ، والتي تنقسم إلى قسمين:
حاول{// بيان تنفيذ البرنامج العادي throw(تعبير نوع الاستثناء);}catch(نوع الاستثناء 1){// رمز معالجة الاستثناء}catch(نوع الاستثناء 2){// رمز معالجة الاستثناء}catch(نوع الاستثناء 3){ / / رمز معالجة الاستثناء}// الكود التالي
ما ورد أعلاه هو نموذج التعليمات البرمجية لمعالجة الاستثناءات في لغة C++، وذلك باستخدام الكلمات الرئيسية الثلاث حاول ورمي وقبض .
عند تنفيذ الكود، يواجه أولاً كتلة كود المحاولة، وتتمثل مهمته في بدء آلية معالجة الاستثناءات، واكتشاف الاستثناءات التي تمت مواجهتها أثناء تنفيذ كود المحاولة، ثم رميها من خلال تعبير نوع الاستثناء في الرمي تعبير ثابت أو متغير. بعد ذلك، ستتم مطابقته (التقاطه) مع كتلة بيان الالتقاط التالية، ثم سيتم تنفيذ الكود المقابل. إذا لم يتم العثور على نوع مطابق، تابع التنفيذ. إذا لم يتم العثور على تطابق، فسيتم استدعاء الدالة إنهاء () تلقائيًا، والوظيفة الافتراضية هي إحباط () لإنهاء البرنامج.
فيما يلي معالجة الاستثناءات عندما يكون المقسوم عليه 0 أثناء عملية القسمة:
#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;try{if(b==0)throwerror!b<0;}catch(constchar*str){cout<<str <<endl;}catch(int){cout<<throwint<<endl;}return0;}
يمكن أن نرى أنه في المحاولة، إذا تم العثور على b يساوي 0، فسيتم طرح سلسلة، ثم سيتم إدخال مطابقة الالتقاط، ومن الواضح أنه سيتم مطابقة المصيد الأول، وسيتم إخراج قيمة str يفهم!