13-07-2008, 17:44
|
|
|
חבר מתאריך: 12.07.08
הודעות: 9
|
|
הסיבה היא שטיפוסים ב-CPP הם סטטיים.
כשאתה מצהיר על b כמצביע ל-Base_Class, ניתן לגשת דרך b רק ל-member-ים שמוצהרים ב-Base_Class. זו המשמעות של טיפוסים סטטיים. אתה רוצה להגיד משהו כזה:
"אז יש לי את b שמוצהר כמצביע ל-Base_Class, אבל בתכלס גרמתי לו להצביע לאובייקט מטיפוס Extending_Class. הקומפיילר הרשה לי לעשות את זה בלי בעיות כי Extending_Class יורש מ-Base_Class, והוא "סוג של Base_Class" מכל בחינה משמעותית. אבל עכשיו אני רוצה להשתמש בתוספות הייחודיות ל-Extending_Class - במה שהוא מוסיף על Base_Class. אני הרי יודע שבאמת b מצביע לאובייקט מסוג Extending_Class ואני רוצה לנצל את הידע הזה."
הדרך לעשות את זה ב-CPP היא באמצעות dynamic_cast. אתה צריך לעשות משהו כזה:
קוד:
Extending_Class *e = dynamic_cast<Extending_Class*>(b);
e->memberFromExtending_Class;
מה שזה אומר זה "אחשלי נראה לי שאפשר להגיד גם ש-b זה מצביע ל-Extending_Class, אולי תקמבן לי את זה?"
במקרה שלך זה יפעל, אבל בגדול צריך לבדוק ש-dynamic_cast לא זורק excpetion, אם תבקש ממנו לבצע המרה לא נכונה.
|