استثناءات C ++
استثناءات C ++
عند تنفيذ كود C ++ ، يمكن أن تحدث أخطاء مختلفة: أخطاء في الترميز قام بها المبرمج ، أو أخطاء ناتجة عن إدخال خاطئ ، أو أشياء أخرى غير متوقعة.
عند حدوث خطأ ، ستتوقف C ++ بشكل طبيعي وتنشئ رسالة خطأ. المصطلح التقني لهذا هو: C ++ ستطرح استثناء (بطرح خطأ).
C ++ جرب وامسك
تتكون معالجة الاستثناءات في C ++ من ثلاث كلمات رئيسية: try
، throw
و catch
:
تسمح try
لك العبارة بتحديد كتلة من التعليمات البرمجية ليتم اختبارها بحثًا عن الأخطاء أثناء تنفيذها.
تطرح throw
الكلمة الأساسية استثناءً عند اكتشاف مشكلة ، مما يتيح لنا إنشاء خطأ مخصص.
تسمح catch
لك العبارة بتحديد كتلة من التعليمات البرمجية ليتم تنفيذها ، في حالة حدوث خطأ في كتلة try.
تأتي الكلمات الرئيسية try
والكلمات catch
الرئيسية في أزواج:
مثال
try {
// Block of code to try
throw exception;
// Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
خذ بعين الاعتبار المثال التالي:
مثال
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw (age);
}
}
catch (int
myNum) {
cout << "Access denied - You must be at least 18 years
old.\n";
cout << "Age is: " << myNum;
}
شرح المثال
نستخدم try
الكتلة لاختبار بعض الكود: إذا كان age
المتغير أقل من 18
، فسنقوم throw
باستثناء ، ونتعامل معه في catch
الكتلة الخاصة بنا.
في catch
الكتلة ، نكتشف الخطأ ونفعل شيئًا حيال ذلك. catch
تأخذ العبارة معلمة : في مثالنا نستخدم int
متغيرًا ( myNum
) (لأننا نطرح استثناءً من int
النوع في try
block ( age
)) ، لإخراج قيمة age
.
في حالة عدم حدوث خطأ (على سبيل المثال ، إذا كان بدلاً من age
، مما يعني أنه سيكون أكبر من 18) ، يتم تخطي الكتلة:20
15
catch
مثال
int age = 20;
يمكنك أيضًا استخدام throw
الكلمة الأساسية لإخراج رقم مرجعي ، مثل رقم / رمز خطأ مخصص لأغراض التنظيم:
مثال
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Error number: " << myNum;
}
التعامل مع أي نوع من الاستثناءات (...)
إذا كنت لا تعرف throw
النوع المستخدم في try
الكتلة ، فيمكنك استخدام صيغة "النقاط الثلاث" ( ...
) داخل catch
الكتلة ، والتي ستتعامل مع أي نوع من الاستثناءات:
مثال
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (...) {
cout << "Access denied - You must be at least 18 years
old.\n";
}