הלך הפולימורפיזם

methadonepretty

New member
הלך הפולימורפיזם

מצטער על זה שאני הולך לדבר קצת באויר, אבל אין לי אפשרות לפרוש כאן קוד (וגם השאלה עקרונית ודי ברורה). תודה על תשומת הלב בכל מקרה. מצב פשוט: יש לי מחלקת אב (B) ומחלקות נגזרות (D1 ו-D2). כדי לנצל פולימורפיזם בצורה המוכרת, ברשותי מערך של מצביעי B לאובייקטים, חלקם מסוג D1 וחלקם מסוג D2. כשאני מבצע מעבר על המערך וקורא באמצעות -> לפונקציה וירטואלית דרך כל איבר, הפונקציה שנקראת היא זו שמימשתי במחלקות D1 ו-D2, תלוי בסוג האובייקט המוצבע. So far so good. הבעיה: באחד המעברים על המערך, כשאני מנסה לקרוא לפונקציה דרך האיברים בצורה המתוארת, הפולימורפיזם פשוט לא עובד. הפונקציה שנקראת היא זו שמומשה במחלקת האב, ולא המימושים אצל המחלקות הנגזרות, למרות שמנגנון ה-virtual אמור לפעול (כל ההגדרות בקבצי ה-H תקינות). בכל שאר המעברים (בפונקציות האחרות) הכל עובד חלק. השאלה (ואני יודע שיהיה קשה לענות בלי לראות שורת קוד אחת שלי): מישהו יכול לשער מה בקוד שלי יכול לגרום למצב הזה? האם נתקלתם פעם במצב הזה, ואתם זוכרים מה היתה הטעות שלכם? אני בטוח שהטעות שלי נובעת מחוסר ניסיון או תשומת לב לפרטים קטנים, אולי כאלה שאני לא מודע להם. מדובר בפרויקט Console Application ב-Visual C++ 6. תודה מראש!
 

DadleFish

New member
מצטער שאתה מדבר באויר,

אבל בלי לראות את הקוד אין סיכוי שנוכל לעזור. ובכל זאת - אתה בטוח שהגדרת את הפונקציה באבא בתור virtual? אתה בטוח שהפונקציות בבנים הן בעלות אותה חתימה בדיוק? וגם אם אתה לא מסוגל להעלות את הקוד מסיבה עלומה כלשהי, הייתי מציע לך בתור תרגיל לנסות לעשות כאילו אתה מציג את הקוד פה. למה זה טוב? כי הייתי רוצה שתיקח את הקוד, תנקה ממנו את כל מה שאתה יכול - פשוט תגלח אותו למשעי - ותישאר ביד אך ורק עם הקטע שלא עובד. רוב הסיכויים שתעלה על הבאג שלך לבד.
 

methadonepretty

New member
תודה

הסיבה שבגללה לא יכולתי להראות קוד היא פשוט העובדה שהוא נמצא על עמדה צבאית. אני מניח שלא הייתי עושה טעות אם הייתי כותב אותו כאן מאפס.
ידעתי שזה חסר סיכוי מהתחלה, אבל בניתי על האפשרות המזערית שמישהו כאן עשה טעות כמו שלי בעבר... Anyway, יצאתי עם עצה קטנה, וזה טוב לא פחות.
ננסה, נחשוב עוד ונקווה לטוב. שיהיה שבוע מצוין!
 
למעלה