פורסם 2010 בספטמבר 1215 שנים שלום רב!בקוד הבא שמתי לב שהאופרטור שווה משפיע על הפלט של התוכנית.ממה שלמדנו, וממה שרשום בחומר, אופרטור השמה לא עובר בתורשהוהb1=b2צריך פשוט לדרוס אחד את השני כמו השוואה רגילה(עובדה שהy בפלט גם נדרס....)אשמח להבהרות.תודה רבהלהלן הקוד:#include <iostream>using namespace std;class One{protected: int x; One(int x1)(x1) { cout<<"B one!"<<endl; } One& operator = (const One& other) { if( this != &other ) x=other.x+10; else cout<<"S A!"; return *this; } virtual void Show () { cout<<"x="<<x<<endl; } ~One() { Show(); }};class Two:public One{ int y;public: Two (int x1,int y1):One(x1),y(y1) { cout<<"B Two!"<<endl; } void Show() { One::Show(); cout<<"y="<<y<<endl; } ~Two() { x--; Show();}};int main(){ Two b1(1,2),b2(3,4); b1=b2; b1.Show();}
פורסם 2010 בספטמבר 1215 שנים אופרטור הם מתודות לכל דבר. הם עוברים בירושה, ואין שום בעיה להגדיר אותם להיות וירטואליים.הבעיה היא מהו הטיפוס של הפרמטר שמקבל =operator. האופרטור הזה צריך לקבל טיפוס הזהה לטיפוס של המחלקה, כלומר אצל One הוא מוגדר כמו שהגדרת:One& operator = (const One& other)ואצל Two הוא מוגדר כך:Two& operator = (const Two& other)גם אם אתה לא מגדיר אותו, הוא מוגדר אוטומטית.על מנת שיעבור בירושה, הוא צריך להיות מוגדר אצל Two בדיוק כמו שהוא מוגדר ב-One, אבל אז לא תוכל להשתמש בו בשביל להשוות בין שני אובייקטים מטיפוס Two. אבל, אם תשתמש במה שהגדרת כרגע, ותגדיר את b2 להיות מטיפוס One, תראה שההשמה מעתיקה רק את x ולא את y (כי אז b1 ישתמש באופרטור= שהוא ירש מ-One, ולא בזה שהוא הגדיר בעצמו).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.