עבור לתוכן

העמסת אופרטור >>

Featured Replies

פורסם

כשאני מנסה להעמיס את האופרטור ">>" לפי הדוגמאות שמצאתי, אני מקבל שגיאת קומפילציה ולא ברור לי למה.

error C2804: binary 'operator <<' has too many parameters

הגדרת האופרטור ב-CLASS

ostream& operator<<(ostream &output, const Transport &PrintTransport);

האופרטור

ostream& Transport:: operator<<(ostream &output, const Transport &PrintTransport)
{
output << PrintTransport.Name;
return output;
}

יש למישהו רעיון?

פורסם

הפונק' הזו לא צריכה להיות מתודה של המחלקה (בין היתר היא לא אמורה לקבל את this, וככה אתה יורד לשני פרמטרים). על friend שמעת?

פורסם
  • מחבר

על friend שמעתי.

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

אז אם תוכל לפרט זה מאוד יעזור.

פורסם

אתה צריך להגדיר את האופרטור הזה כ-friend ואז הוא לא יהיה מתודה של המחלקה. כלומר, במקום שה-Prototype שלה יהיה כזה -

ostream& Transport:: operator<<(ostream &output, const Transport &PrintTransport)

הוא יהיה כזה -

ostream& operator<<(ostream &output, const Transport &PrintTransport)

בסופו של דבר זו צריכה להיות פונקציה גלובלית.

פורסם
  • מחבר

אוקיי, בצורה הזאת זה עובד.

אבל עדיין לא ברור לי למה האופרטור צריך גלובלי.

ולמה בעצם האופרטור מקבל שני פרמטרים ולא אחד מסוג ostream.

פורסם

כשאתה כותב לדוגמא

cout<<my_obj;

אתה בעצם מפעיל אופרטור >> בין שני אובייקטים, הראשון הוא cout והשני הוא האובייקט שלך. בגלל זה האופרטור צריך לקבל איזשהו ostream כפרמטר ראשון (שמאלי) ואיזשהו אובייקט כפרמטר שני (ימני).

פורסם
  • מחבר

הבנתי, תודה.

פורסם
  • מחבר

תודה :xyxthumbs:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים