4.2.4. סוגים ותכנות מונחה עצמיםטיפוס ומחלקה אינם תמיד מושג זהה. בשפת LST טיפוס ומחלקה הינם מונחים שקולים. בשפת C++ לעומת זאת מחלקה היא אלמנט הרבה יותר חזק – מטיפוס בשפת C++ לא ניתן לרשת. הבדל בין מחלקה לטיפוס: מחלקה יכולה לנהל בצורה מלאה את התנהגות העצם. למשל, חריגה ב-int לא מתבטאת ב-C (חלוקה ב-0 לעומת זו כן). לעומת זאת מחלקה יכולה להגדיר את התנהגותה באופן מוחלט עבור כל מקרה. חלק חשוב בהורשה הוא תאימות. כל פעולה שנעשית על האב, חייבת לפעול נכון אצל כל בן. מכיוון שכל פונקציה שמקבלת את האב יכולה לקבל גם אובייקט מסוג הבן, הבן חייב לשמור על המוסכמות בהם עומד האב. ל-strict inheritance יש חסרון אחד מרכזי, והוא שאי אפשר לעשות באמצעותו הרבה – מכיוון שלא ניתן לשנות את התנהגות האב. לפיכך, נציג מיד סוגי הורשה נוספים. |
תוכן העניינים:
קישורים רלוונטיים:שיתוף: |
Borland style vptr
לפי מה שאני מכיר:"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....