5.2.3. High Level Method

בעזרת Dynamic Binding ניתן ליצור מתודות פולימורפיות – מתודות שיבצעו דברים שונים לגמרי עבור אובייקטים שונים.

void Shape::move(Point delta)

{

      hide();

      location += delta;

      draw();

}

hide() ו-draw() הן מתודות וירטואליות.

נבדיל בין מספר סוגי מתודות:

  • Low Level Methods – ממומשים רק באמצעות data members של המחלקה – לא מושפעים מ-overriding.
  • High Level Methods – ממומשים גם בעזרת מתודות אחרות העשויות להיות פולימורפיות.
  • Outer Level Methods – ממומשות רק על ידי פונקציות חיצוניות – פולימורפיות לגמרי.

מאת: ניצן

Borland style vptr

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