מפרקים ב ++c

smookey

New member
מפרקים ב ++c

כמו שלמדתי, כאשר יש מחלקה וירטואלית, גם המפרק של המחלקה צריך להיות וירטואלי. אז הגדרתי את המפרק של מחלקת הבסיס כוירטואלי ועיון קצר ב HELP של בורלנד מגלה שע"י כך גם המפרקים של הנגזרות הם וירטואליים. אבל נתקלתי בבעיה. בנסיון לדבג ( f7 ) אני מגלה שהוא לא נכנס לתוך המפרקים, פשוט מדלג עליהם. אז הוצאתי איזה פלט קטן למסך כדי לדעת שהם אכן עבדו ואכן הם עובדים כמו שצריך. עשיתי ניסוי קטן והורדתי את הגדרת המפרק כוירטואלי. ונחשו מה? אותו הדבר בדיוק, כל המפרקים עובדים באותו הסדר. אז נשארתי עם 2 שאלות ואשמח אם מישהו יוכל לעזור לי. 1. איך בכל זאת גורמים לבורלנד להיכנס לתוך המפרקים הוירטואלים בדבג כדי שאוכל לראות אותם בפעולה ? 2. למה להגדיר את המפרקים כוירטואלים אם אין שוםן הבדל ?
 

annefan

New member
בעיה ב-BORLAND

לפי מה שאתה מתאר הבעיה היא לא ב-++C, אלא בסביבה שבה אתה עובד (אחרת לא היית רואה את הפלט שלהם). הפתרון לזה הוא לעבור לסביבה קצת יותר מעודכנת. מפרק של מחלקה תריך להיות וירטואלי אם יירשו מהמחלקה שלך, ואם יגשו לאובייקטים שיורשים מהמחלקה שלך, דרך מצביעים לאובייקטים מהסוג של המחלקה שלך. לגבי השאלות שלך. 1. לגבי הסביבה, אין לי מושג. 2. יש הבדל עצום אם ה-DTOR וירטואלי או לא, כאשר אתה פונה דרך מצביע לאב לאובייקט מסוג בן.
Ben * b = new b(); Aba * a = b; delete a;​
אם ה-DTOR של Aba הוא וירטואלי (וממילא כל היורשים ממנו), הכל בסדר. אם הוא לא, האוביקט לא יהרס כמו שצריך.
 
למעלה