כיצד לטפל בחריגים בקלות ב-C++

Kyzd Ltpl Bhrygym Bqlwt B C



אירועים בלתי צפויים המתרחשים בזמן שהתוכנית פועלת מכונים חריגים או שגיאות. חריגים מתרחשים במהלך זמן ריצה, ולא ניתן לתפוס אותם במהלך ההידור, כך שהם עלולים לגרום לבעיות חמורות בתוכנית. טיפול בחריגים בצורה טובה בתוכנית C++ הוא מטרה עיקרית עבור מתכנת להשיג את התוצאות הרצויות.

כיצד לטפל בחריגים בקלות ב-C++

Exception Handling ב-C++ מתייחס למנגנון של זיהוי שגיאות בזמן ריצה וטיפול בהן ביעילות, כמו טיפול בתשומות לא חוקיות, חלוקה של מספר באפס בפעולות חלוקה ועוד רבות אחרות.

טיפול חריג ב-C++ כולל שלוש מילות מפתח: נסה, זרוק ותפוס. המשפט try מאפשר למשתמש להגדיר את גוש הקוד שעלול להעלות חריג בקוד. מילת המפתח זריקה זורקת חריגה אם היא מזוהה לאחר בדיקת החסימה תחת מילת המפתח try. מילת המפתח catch מכילה את גוש הקוד שיכול להתמודד עם החריג שנצפה בבלוק try.







דוגמה 1: טיפול בחריגים במהלך החלוקה

הקוד נכתב כדי לבדוק את החריגים במהלך החלוקה.



#include
באמצעות מרחב שמות סטד ;

int רָאשִׁי ( ) {

לְהַכפִּיל מונה, מכנה, חלוקה ;

cout << 'הזן ערך מונה:' ;
אֲכִילָה >> מוֹנֶה ;

cout <> מְכַנֶה ;

לְנַסוֹת {


אם ( מְכַנֶה == 0 )
לזרוק 0 ;


חֲלוּקָה = מוֹנֶה / מְכַנֶה ;
cout << מוֹנֶה << '/' << מְכַנֶה << ' = ' << חֲלוּקָה << endl ;
}

לתפוס ( int num_exception ) {
cout << 'שגיאה! מחלק לא יכול להיות  ' << num_exception << endl ;
}

לַחֲזוֹר 0 ;
}

בתוכנית זו, המשתמש מזין את הערך של המונה והמכנה המוצהרים בסעיף main() . בבלוק try, נעשה שימוש במשפט if כדי לבדוק את החריג כלומר האם המכנה הוא אפס או לא. מכיוון שלא ניתן לבצע חלוקה עם מחלק אפס אם נמצא שהמכנה הוא 0, הוא יזרוק חריג ובלוק ה-catch יחזיר ארגומנט שגיאה אחרת מתבצעת פעולת החלוקה הפשוטה.







המשתמש מזין מונה 42 ו-0 במכנה, מה שגורם לחריגה, כך שהתוכנית מחזירה את ארגומנט השגיאה.



המשתמש מזין מונה 42 ו-2 כמכנה, מכיוון שלא נמצא חריג, התוצאה לאחר החלוקה חוזרת.

דוגמה 2 טיפול בחריגים לבדיקת הגיל

תוכנית זו בודקת חריגים בגיל המשתמש.

#include
באמצעות מרחב שמות סטד ;

/*
כאן, אנו רוצים לזרוק חריג (גיל כחריג) אם גילו של האדם הוא פחות מ-18.
*/

int רָאשִׁי ( )
{
// בודק אם הגיל הוא יותר מ-18 בבלוק לנסות.
לְנַסוֹת
{
int גיל ;
cout << 'הזן את הגיל שלך כדי לגשת:' ;
אֲכִילָה >> גיל ;

אם ( גיל >= 18 )
{
cout << 'כניסה מורשית.' ;
}
// חריג מותאם אישית נזרק אם הגיל הוא מתחת לגיל 18.
אַחֵר
{
לזרוק ( גיל ) ;
}
}
// תופס את החריג שנזרק והצגת הפלט הרצוי (הגישה נדחתה!)
לתפוס ( int איקס )
{
cout << 'הגישה נדחתה! אתה קטין.' << endl ;
}
לַחֲזוֹר 0 ;
}

בתוכנית זו, מוגדר משתנה בעל ערך שלם. המשתמש מתבקש להזין את הגיל ולנסות בדיקות חסימה אם גיל המשתמש הוא מעל או שווה ל-18. אם זה לא נכון אז הוא זורק חריג, והחסימה החריגה תחזיר Access denied! טַעֲנָה. אחרת, הגישה תינתן.

המשתמש מזין את הגיל להיות 12 כדי לבדוק את הענקת הגישה, מכיוון שגיל זה הוא מתחת לגיל 18, כך שהארגומנט Access denied מוחזר.

המשתמש מזין גיל 20, מכיוון שזה מעל 18, כך שהגישה ניתנת למשתמש.

הערה : אם אין בלוק קאץ' בתוכנית, אז התוכנית תתנהג בצורה חריגה ותסתיים באופן בלתי צפוי במקרה של חריגים.

סיכום

Exception Handling ב-C++ מתייחס למנגנון של זיהוי שגיאות בזמן ריצה וטיפול בהן ביעילות. זה כולל שלוש מילות מפתח לנסות, לזרוק ולתפוס. החריג נבדק עבור הקוד בבלוק try, מילת המפתח throw זורקת את החריג אם נמצא, ובלוק ה-catch מטפל בחריג שנזרק עבור בלוק try. טיפול בחריגים הופך את חווית המשתמש לחלקה ונהדרת על ידי הימנעות משגיאות בזמן ריצה.