5.3.2.1. Access Conformance - רמת הגישה של הפונקציהAccess Conformance: כל הגרסאות של הפונקציה צריכות להיות בעלות אותה רמת נגישות (protected/public). שפת Smalltalk שומרת על עיקרון זה. שפת C++ לעומת זאת משאירה זאת באחריות המתכנת. נביט בדוגמא הבאה: class Base { public: virtual void f(void); }; class Derived : public Base { private: void f(void); } y, *py = &y; Base *px = py; py->f(); // Error! Derived::f is private. px->f(); // OK! (but breaks encapsulation.) בדוגמא זו על ידי מצביע ממחלקת הבסיס הצלחנו להריץ את הפונקציה f() של המחלקה הנגזרת, שהיא מוגדרת כ-private. דרישת התאימות של רמת הגישה דורשת: הפונקציה החדשה, הדורסת, חייבת להיות נגישה לכל אלמנט שהפונקציה המקורית היתה נגישה לו. אם מקטינים את זכויות הפונקציה, פגענו בתאימות. אם מגדילים את הזכויות (מ-protected ל-public למשל) לא פגענו בתאימות. |
תוכן העניינים:
קישורים רלוונטיים:שיתוף: |
Borland style vptr
לפי מה שאני מכיר:"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....