דף הבית  שיעורים  נושאים מתקדמים  טיפול ב-exceptions - המשך
 
טיפול ב-exceptions - המשך
 
הפונקציה G מכילה פקודת catch אחת המטפלת בהפניות לאובייקטים מסוג BadParam. מכיוון שהמחלקות BadFirstParam ו-BadSecondParam יורשות מהמחלקה BadParam, גם אובייקטים שלהם יתפסו בפקודת ה-catch.
פקודת ה-catch מפעילה את הפונקציה Print על האובייקט הנתפס ומכיוון שהפונקציה Print הוגדרה כוירטואלית, תופעל הפונקציה המתאימה בהתאם לטיפוס האובייקט הנזרק.
דבר אחרון שנרצה להזכיר הוא שניתן לרשום את כל ה-exceptions שפונקציה יכולה לזרוק בהגדרת הפונקציה, כמו כאן:

class Date {
 int day;
 int month;
 int year;
public:
 Date();
 class Range{};
 class YearRange:public Range{};
 class MonthRange:public Range{};
 class DayRange:public Range{};
 void Set(int year, int month, int day)
  throw(YearRange, MonthRange, DayRange);
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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