מדי פעם היינו רוצים לכתוב אופרטורים משלנו למחלקות.
למשל, נניח שאנחנו כותבים מחלקה המייצגת מבנה מתמטי עם חיבור או כפל, למשל מטריצות 5x5, מספרים רציונליים או מספרים מרוכבים, אז היינו רוצים שיהיה אפשר לחבר שני איברים מהמבנה הזה עם אופרטור ה+, כמו שאפשר לחבר שני intים.
ניתן לעשות זאת באמצעות משהו שנקרא Operator overload. מה זה? מדובר בעצם פונקציה סטטית שתפעל ברגע שיפעילו את האופרטור שלנו.
למשל, נניח שיש לנו מחלקה המייצגת מטריצה 5x5:
|
|
נוכל ליצור אופרטורים מתאימים בצורה הבאה:
|
|
בסה"כ מדובר בפונקציות סטטיות שמבצעות את הקריאות הנכונות.
מה שכן, האופרטורים יכולים לעבוד גם אם אחד האיברים הוא לא איבר של המחלקה שלנו:
למשל, הכפלת מטריצה בקבוע:
|
|
זהו, ככה אפשר להשתמש בפונקציות האלה בצורה יותר נוחה:
|
|
יש פה מגבלה שהיא די מובנת – האופרטור חייב לקבל בתור אחד הפרמטרים את הטיפוס של המחלקה, אחרת היינו יכולים לעשות Overloadים לטיפוסים שהם לא שלנו, והדבר לא רצוי.
יש לזה חסרון שהוא לא מובן ממבט ראשון – אי אפשר ליצור Operator Overload לממשקים, או בכלל להכריח ממשק שיהיה לו אופרטור כזה (למשל, היינו רוצים שלממשק שמייצג מספר כלשהו, יהיה גם אופרטור חיבור).
שבוע עם אופרטור טוב