C++/העמסת אופרטורים: הבדלים בין גרסאות בדף

מ
תיקונים מישניים
(new & delete)
מ (תיקונים מישניים)
{{C++}}
{{בעבודה}}
כל ביטוי מורכב מפעולות ופרמטרים איתם מתבצעות הפעולות, פעולות אלו נקראות '''אופרטורים''' ואילו הפרמטרים איתם עובדים האופרטורים נקראים '''אופרנדים'''. בC++ ישנם אופרטורים רבים שחלקם מקבלים כפרמטרים טיפוסים ומרחבי שמות (כמו :: ו-sizeof), פעולתם מתבצעת רק בעת הידור התוכנית, ואילו האחרים מקבלים אובייקטים, אופרטורים אלה עובדים עם האוביקטיים בזמן ריצה. כאשר אנו מגדירים מחלקות אנו מוסיפים טיפוסים חדשים לשפה, אבל עד כה ביצענו איתם פעולות רק ע"י קריאות לפונקציות המחלקה או פונקציות רגילות. כדי להגדיר טיפוס המשתלב בשפה בדומה לטיפוסים המובנים נגדיר עבורו אופרטורים. דבר זה נקרא '''העמסת אופרטורים''' כיוון שאנו מעמיסים אופרטורים נוספים לאופרטורים הקיימים. המטרה העיקרית בהעמסת אופרטורים היא נוחות וקריאות הקוד, הרי הקוד {{קוד בשורה|<nowiki>a = b + c</nowiki>}} קריא יותר למתכנת מאשר {{קוד בשורה|<nowiki>a.set(add(b, c))</nowiki>}}. שימו לב: בשני הביטויים האלה אנו לא יודעים מהי באמת התוצאה כי לא ידועים לנו לא הטיפוסים של a, b, c ולא המשמעות של =, +, add, set עבור טיפוסים אלה.
 
 
''הערה:'' אין צורך בסוגריים בביטוי זה כיוון שפעולות ההשמה מתבצעות מימין לשמאל (ולא משמאל לימין כמו פעולות חשבוניות אחרון).
 
''הערה:'' כאשר משמעות הביטוים {{קוד בשורה|<nowiki>a = a @ x</nowiki>}} ו-{{קוד בשורה|<nowiki>a @= x</nowiki>}} זהה, מקובל לממש את אופרטור ה{{קוד בשורה|@}} באמצעות אנלוג ההשמה שלו {{קוד בשורה|<nowiki>@=</nowiki>}}. הדבר נכון גם לאופרטורים אחרים שמימושיהם דומים, כמו אופרטורי ההשוואה.
 
== קריאה לפונקציית האופרטור ==
randGen(int seed) : num(seed) {}
 
static const int max = 0x80000000numeric_limits<int>::max();
int operator () () {
num *= 1664525;
num += 1013904223;
return num & 0x7FFFFFFF~max;
}
 
 
בחלק זה נדגים כיצד להעמיס את האופרטורים האלה, ובשביל הפשטות נשתמש ב-malloc להקצאת הזיכרון.
<span style="color: red;">'''להוסיף דוגמה'''</span>
 
{{C++|מוגבל=כן}}
204

עריכות