C++/חריגות
מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.
תוכן עניינים |
[עריכה] חריגות ב C++
[עריכה] הקדמה
חריגות הן חלק ממנגנון טיפול השגיאות ב C++. לעולם אין אנו יכולים להניח שהקוד שלנו ירוץ ללא שגיאות, וב C++ ניתן להודיע על שגיאות באמצעות חריגות, והן מאפשרות להפריד את הטיפול בשגיאות, מהלוגיקה של התוכנה, ובכך ליצור קוד נקי יותר.
לפני שנסביר מהן חריגות, נזכר בטיפול השגיאות ב C. נניח שאנו ממשים את הפונקציה sqrt המחזירה שורש של מספר. חתימת הפונקציה:
double sqrt(double num);
המספר שמועבר לפונקציה חייב להיות חיובי. ב C, כדי לטפל בהכנסת ערך לא חוקי, היינו צריכים לציין זאת באמצעות ערך חזרה מיוחד:
double sqrt(double num){ if(num < 0.0) { return -1.0; } // Do the rest of the root )
והקוד שמשתמש בפונקציה, היה נראה כך:
double sqrtNum = sqrt(num); if (sqrtNum < 0) { // handler error... }
בגלל שטיפול השגיאות אינו מובנה בשפה, אנו נאלצים לאחר כל פונקציה, לבדוק האם התרחשה שגיאה שעלולה לפגוע בנכונות התוכנית.
[עריכה] חריגות
פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.
כעת נציג את מנגנון החריגות ב C++. חריגה היא משהו ש"נזרק" ממקום שבו אריעה שגיאה בתוכנית. ברגע שחריגה נזרקת, הקוד הרגיל של התוכנית לא ימשיך, ויבוצע במקומו קוד מיוחד לטיפול בשגיאה, או שהתוכנית תסתיים.
מה בעצם ניתן לזרוק ? אובייקטים ופרימיטיבים של C++. כדי לזרוק חריגה משתמשים במילת המפתח throw. נדגים זאת כעת.
[עריכה] זריקת חריגה
קודם כל, נגדיר מחלקה מיוחדת, שנוכל לזרוק אובייקטים שלה. אין חובה לעשות זאת, וניתן לזרוק כל מחלקה, אך ממולץ ליצור היררכית מחלקות מיוחדת עבור חריגות, כאשר כל מחלקה נועדה לסוג אחר של שגיאה.
class InvalidArgumentException{};
כעת, נממש מחדש את sqrt:
double sqrt(double num){ if(num < 0.0) { throw InvalidArgumentException{}; } // Do the rest of the root )