
01-11-2005, 15:02
|
 |
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
|
מממ...
למה כל המופעים צריכים "לקבל" את הערך logfile...?
בוא נראה מבנה עקרוני של המחלקה ErrorHandler
כתבתי כמה שורות על מנת שנוכל לנתח אותן:
קוד:
class ErrorHandler
{
public:
ErrorHandler();
ErrorHandler(CString);
virtual ~CErrorHandler();
protected:
CString sErrFile;
void rise_err(UINT,UINT);
};
ErrorHandler::CErrorHandler() : sErrFile("log.txt")
{
}
ErrorHandler::CErrorHandler(CString errfile) : sErrFile(errfile)
{
}
void ErrorHandler::rise_err(UINT nObjid, UINT nErrid)
{
while (file is already open with another session);
add to file nObjid, nErrid, date, time
}
במחלקה יש לנו בנאי ברירת מחדל שמגדיר לנו את המשתנה sErrFile
משתנה זהב מחזיק את הנתיב לקובץ השגיאות שלנו.
במקרה זה נתתי לו ערך בעצמי, אך כמובן שהערך ששולחים אליו, יכול להיות קבוע (const)
יש לנו גם בנאי לא טריוויאלי, אשר דרכו ניתן להגדיר קובץ אחר.
בתכנית שלך, כמו שאני מבין, מספיק הבנאי הראשון.
בתכניות בהן רוצים לדוגמה להפריד בין סוגי השגיאות (שגיאות קלט/פלט) שגיאות
טיפול בקבצים וכו - ניתן להגדיר בכל אובייקט את שם הקובץ.
כמובן שאנו לא צריכים ממש לכתוב את שם הקובץ בכל מחלקה ומחלקה, אלא שוב
ליצור מחלקה בין מחלקת הבסיס שלנו לבין המחלקות המתאימות, לדוגמה:
מחלקה בשם io_base, מחלקה שממנה ירשו כל המחלקות המטפלות ב-io והיא עצמה
תירש מ- BaseObject.
הבנאי של מחלקה זו - הוא זה המגדיר את קובץ הפלט שלנו (לדוגמה io_err.txt)
גם את נושא התזמון של כתיבה לקובץ, ניתן לפשט ולכתוב לחוצץ בזיכרון (שהתזמון
שלו יותר פשוט) ולתת למחלקה הראשית של התכנית לתזמן מתי כל החוצץ יכתב/יזרק
לקובץ (dumping).
אני מקווה שההסבר הזה היה ברור יותר,
(:
|