Presentation is loading. Please wait.

Presentation is loading. Please wait.

תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.

Similar presentations


Presentation on theme: "תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct."— Presentation transcript:

1 תרגול חזרה

2 מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct B: virtual A { int y; virtual void a(){} virtual void b(){} }; struct C: A, virtual B { int z; virtual void a(){} virtual void b(){} virtual void c(){} };

3 ירושה מרובה מהו הפלט? במקרה של שגיאת קומפילציה, יש לציין את הפקודה שגרמה לשגיאה. struct A { virtual void f() { cout << 1; } }; struct B : virtual A { virtual void f() { cout << 2; } }; struct C : virtual A { virtual void f() { cout << 3; } }; struct D : B, C {}; int main() { B* b = new D(); b->f(); }

4 ירושה מרובה - המשך struct A { virtual void f() { cout << 1; } }; struct B : A { virtual void f() { cout << 2; } }; struct C : A { virtual void f() { cout << 3; } }; struct D : B, C { }; int main() { C* c = new D(); c->f(); }

5 ירושה מרובה - המשך struct A { virtual void f() { cout << 1 ;} }; struct B : A { virtual void f() { cout << 2; } }; struct C : A { virtual void f() { cout << 3; } }; struct D : B, C { }; int main() { D* d = new D(); d->f(); }

6 קישור דינאמי מה הפלט של התכנית הבאה: struct C { virtual int eq(const C& other) const { return 1; } }; struct SC : C { virtual int eq(const C& other) const { return 2; } virtual int eq(const SC& other) const { return 3; } }; void go(const C& c, const C& c1, const SC& sc) { cout << c.eq(c) << c.eq(c1) << c.eq(sc) << endl; cout << c1.eq(c) << c1.eq(c1) << c1.eq(sc) << endl; cout << sc.eq(c) << sc.eq(c1) << sc.eq(sc) << endl; } int main(int argc, const char* argv[]) { go(C(), SC(), SC()); return 0; }

7 המרות struct A { virtual ~A();}; struct B { virtual ~B();}; struct C { int i; C(int j):i(j){}}; struct D: A {...}; struct E: virtual B {...}; class F: A {...}; struct G: C, D, E, F {...}; G& g = *new G; C& c = g; D& d = g; A& a = d;

8 static_cast (&d); dynamic_cast (&d); static_cast (d); dynamic_cast (d); static_cast (&c); dynamic_cast (&c); static_cast (a); dynamic_cast (a); static_cast (g); dynamic_cast (g); static_cast (g); dynamic_cast (g); static_cast (d); dynamic_cast (d); static_cast (a); dynamic_cast (a);

9 בדיקת טיפוסים רשומה היא מחלקה שבה ניתן להגדיר אך ורק שדות. record Ra { int n; String s; } record Rb { int n; } Ra ra1 = new Ra(n = 5, s = "Hi"); תכונות של רשומות: Reference Semantics Ra ra2 = ra1; //ra2 and ra1 point at the same object subtyping:רשומה R2 היא תת-טיפוס של רשומה R1 אם לכל שדה f1 ב-R1 קיים שדה f2 ב- R2 כך ש f1 ו-f2 הם בעלי אותו שם, ובנוסף הטיפוס של f2 הוא תת-טיפוס של הטיפוס של f1 (או שהטיפוס של f1 זהה לטיפוס של f2). Rb rb1 = ra1; mutablity: שדות של רשומה ניתנים לשינוי ra1.n = 6; רשומות שתומכות בכל התכונות הנ"ל יוצרות "חור" במערכת הטיפוסים. כתוב דוגמא שמראה כיצד ניתן לגרום לשגיאת טיפוסים בזמן ריצה ע"י שימוש ברשומות.

10 Little Smalltalk מה מודפס כתוצאה מהרצת הפקודות הבאות? Set new superClass print Class new superClass print Object superClass class print (Class new isMemberOf: Object class) print (Class new isMemberOf: Object) class print


Download ppt "תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct."

Similar presentations


Ads by Google