נשלח בתאריך: 12 October 2007 בשעה 18:26 | | IP רשוּם
|
|
|
|
1. העמסת אופרטורים פרושה לממש פעולות אריתמטיות אונריות או בינאריות בין אובייקטים דומים ושונים. לדוגמה: נאמר שיש לך שתי מחלקות שונות Car, LicencePlate. למחלקות אלה יש שתי אובייקטים שונים (מופעים חיים).
;Car c1 ;LicencePlate p1
פעולה הגיונית בינהם תהיה פעולת צירוף שיכולה להתפרש כאופרטור +:
;c1+p1
נצפה שלאחר פעולה זו מס' הרישוי יתעדכן לתוך אובייקט המכונית, לכן נתצטרך לממש פונקציה מיוחדת במחלקה Car שתאפשר פעולה זו, כלומר לבנות אופרטור אונרי המקבל מס' רישוי ומחזיר כלום:
(void Car::operator+(LicencePlate plate } מימוש הפעולות הרצויות // {
במקרה אחר נרצה לאפשר את הכתיבה הבאה:
;Car c2 = c1 + p1
באופן זה (לדוגמה) נרצה להחזיר את תוצאת החיבור בין c1 ל-p1 לתוך c2 מבלי לשנות את c1, לכן נבנה את האופרטור כך:
(Car Car::operator+(LicencePlate plate } מימוש הפעולות הרצויות: בניית אובייקט זמני c_tmp // העתקת כל הנתונים אליו + מס' הרישוי והחזרתו. / ;return c_tmp {
ישנם אופרטורים הממומשים באופן אוטמטי כגון האופרטור = אופרטור זה בין שני אובייקטים, מעתיק ביט ביט את כל הנתונים מאובייקט אחד לשני, אלא אם כן בונים אחד אחר.
2. לגבי השאלה הזו כדאי שתוסיפי עוד פירוט לגבי הבעיה כי: א. היא יכולה להיגרם מכמה סיבות. ב. התיאור "פרוייקט לא נפתח" לא ברור. (לפחות לי).
|