5.1.3. Non strict inheritance

Non strict inheritance: ידוע גם בשם הכולל הורשה.

זהו מנגנון חזק יותר מהמנגנון של Strict Inheritance. מנגנון זה מאפשר לנו:

  • הוספת פעולות חדשות לאובייקטים מהמחלקה החדשה.
  • הוספת שדות חדשים לאובייקטים מהמחלקה החדשה.
  • מימוש שונה / הרחבת הודעות שהיו קיימות במחלקה המקורית.

התוצאה: מנגנון חזק יותר באמצעותו ניתן לבצע דברים חדשים.

נשים לב שלא ניתן, גם בעזרת מנגנון זה, להגדיר מחדש שדות, אלא רק התנהגות.

לא ניתן להגדיר בבן משתנה שהוא char x אם במחלקת האב קיים שדה int x.

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

מאת: ניצן

Borland style vptr

לפי מה שאני מכיר:
"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....
שיתוף:
| עוד