עזרה בשימוש בפולימורפיזם על map בc++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בשימוש בפולימורפיזם על map בc++


FARKASH7

Recommended Posts

אהלן.

יש לי מחלקה אבסטרקטית נקרא לה A עם שיטה אחת נקרא לה perform שממנה יורשות שתי מחלקות נקרא להן B ו C.

אני רוצה להכניס אובייקטים של B וC לתוך multimap וכשאני עובר על הmultimap להפעיל על כל איבר שאני עובר עליו את השיטה perform מבלי שאני בודק מאיזה סוג הוא.

מה שעשיתי הוא אתחלתי multimap ששדה הdata שלו הוא מסוג פויינטר לA.אתחלתי משתנים באופן הבא:

A* somthing=new B או A* somthing=new C.

ואז אני מבצע:

mymultimap.insert(make_pair(key,somthing)w; להתעלם מהw בסוף.

כשאני עובר באיטרציה על המאפ ומנסה להפעיל את perform על שדה הdata אני מקבל הודעת שגיאה, האובייקטים מזוהים כA, ואני מקבל segmentation fault.

גם כאשר אני מנסה לגשת לשדה של אחת המחלקות B אוC הוא מזוהה כA וזורק לי שגיאה שלA לא קיים שדה כזה.

את פעולת ההפעלה אני כך:

it->second->somefeild/somemethod()w. להתעלם מהw

it הוא איטרטור שרץ על המולטימאפ.

לפי מה שקראתי באינטרנט צריך לעבוד עם פויינטרים וזה מה שאני עושה כדי למנוע slicing.משום מה נראה לי שעדיין הקומפיילר slicing.מה יכולה להיות הבעיה?

קישור לתוכן
שתף באתרים אחרים

הכל רשום בהודעה הראשונה, אבל אני אחזור על זה.

המולטימאפ מוגדר ככה:

<string, A*>

ככה אני מכניס איבר למאפ:

A* somthingtoinsert = new B()w

mymap.insert(key,somthingtoinsert)

אני עובר בעזרת איטרטור it על המפה ומנסה להפעיל שיטות/לגשת לשדות כך:

it->second->somefeild/somemethod()w. להתעלם מהw

קישור לתוכן
שתף באתרים אחרים

טוב, אולי מישהו יעזור לך, נראה לי שכדאי לך:

א. להשתמש ב CODE TAG בשביל לשים את הקוד במקום W, זה יותר קריא.

ב. כדאי לך לעשות מה שאמרתי (לרשום קוד, ולא "אני עובר בעזר איטרטור it).

בהצלחה.

קישור לתוכן
שתף באתרים אחרים

אני מניח שB ו C יורשים מA. אם כך אתה פשוט צריך מתודה ווירטואלית ב A שנקראת PERFORM ו B ו C ממשים את אותה מתודה.

חפש virtual method יש גם משהוא שנקרא pure virtual שאז אתה לא צריך לתת ממימוש ב A אבל זה לא קריטי, אתה יכול פשוט לתת מימוש ריק.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...