דף הבית  שיעורים  מחלקות  העמסת אופרטורים - המשך
 
העמסת אופרטורים - המשך
 
והנה הצורה בה הפונקציה נראית. במקרה זה, שוב פישטנו את הפונקציה, ע"י הנחה שכל חודש מכיל בדיוק 30 יום:

void Date::operator+=(int a)
{
 day += a;
 if (day>30)
 {
  month += (day-1)/30;
  day = (day-1)%30+1;
 }
 if (month>12)
 {
  year += (month-1)/12;
  month = (month-1)%12+1;
 }
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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

Date a(1996,1,1);
a += 45;
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

בנוסף, כמו בכל קריאה לפונקציה, ניתן להוסיף גם מספרים מסוג float או long באמצעות האופרטור והמהדר יידע לבצע המרה ל-int לפני הפעלת האופרטור.
כמובן שכדי להשתמש בכל אופרטור אחר, כמו + ו- =-, יש להגדיר פונקציות גם עבורם.
כל הפונקציונליות הזו נקראת העמסת אופרטורים (operator overloading). באותה דרך בה העמסנו פונקציות בשיעורים קודמים כדי לאפשר מספר משמעויות לאותו שם פונקציה, העמסת אופרטורים מאפשרת לתת מספר משמעויות לאותו אופרטור. כמו לדוגמא, אופרטור =+ יעבוד בצורה אחת כאשר הוא מופעל על int, ובדרך שונה כאשר הוא מופעל על אובייקט Date.
ניתן לבצע העמסת אופרטורים על כל האופרטורים הבאים:

אריתמטיים סיביות התנייה אחרים
+ (חיבור) << (הזזה ימינה) == (שווה ל) = (השמה)
- (חיסור) >> (הזזה שמאלה) > (קטן מ) ( )
* (כפל) & (וגם) < (גדול מ) [ ]
/ (חילוק) | (או) => (קטן שווה) *
% (מודולו) ~ (שלילה) =< (גדול שווה) <-
++ (הגדלה ב-1) ^ (xor) =! (שונה) ,
-- (הקטנה ב-1) =<< && (וגם) !
=+ =>> || (או) (char *) המרות
=- =&   new
=* =|   delete
=/ =~    
=% =^    

זה כולל את כל האופרטורים של השוואה, וגם את האופרטורים new ו-delete שבעזרתם העמסתם תוכל להשתמש בדרך משלך להקצאת זיכרון. העמסת [] יכולה להיות שימושית ליצירת מערכים חכמים.