12-09-2008, 20:08
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
מצהירה על פונק' שאינה מתודה (כלומר לא שייכת למחלקה) שיכולה לגשת לשדות ה-private של המחלקה בה היא מוגדרת כ-friend.
לדוגמא, יש לך מחלקה Complex המייצגת מספרים מרוכבים (מספר מרוכב הוא מספר מהצורה z=x+i*y).
עכשיו אתה רוצה לבנות אופרטור +.
מספר מרוכב ניתן לחבר לחסר להכפיל וכו' עם כל מספר אחר - ממשי, שלם וכו'..
אז אתה מגדיר אופרטור במחלקה שמקבל double ומבצע את החיבור.
אבל כידוע אופרטור + הוא אופרטור סימטרי: x+y=y+x.
אבל ברגע שאתה מגדיר את האופרטור + כמתודה, סדר המשתנים בו מוגדר מראש: לכן אם יש לך z מאיפוס Complex ו-x מטיפוס double אתה תוכל לעשות z+x אבל לא x+z כי לא קיים אופרטור + שמקבל קודם double.
אתה צריך להעמיס גם אותו... אבל איך?
אם תיצור פונק' אופרטור חיצונית, לא תוכל לגשת לשדות של ה-Complex.. בעיה...
אז מה, למנוע סימטריות? גרוע...
מה נותר לעשות? 2 אפשרויות:
אחת (מקובלת יותר למען האמת) זה להגדיר אופרטור חיצוני שהוא משמש כמעטפת לפעולה בהחלפת הסדר.
אבל זה כמובן לא מה שמעניין אותנו...
האפשרות השניה היא להצהיר על אופרטור + ההפוך (קודם double ואז Complex) כפונק' friend.
ואז להגדיר אותו חיצונית, אבל עדין תקבל גישה לשדות ה-private.
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
|