אתם מתרגלים שאלה מתוך בגרות מדעי המחשב — מבני נתונים (שאלון 899271)מבחן 2025 · קיץ מועד א · שאלה 12כל שאלות המבחן ←
תכנות מונחה עצמיםירושה

A היא מחלקת-הבסיס: שדה מוגן i ובנאי שמקבל אותו. B יורשת מ-A (מוסיפה 1 ל-i בקריאה ל-super/base) ומגדירה שתי גרסאות עמוסות (overload, לא דריסה) של foo: foo(Object) - לא וירטואלית - ו-foo(B,int) - מסומנת virtual וניתנת לדריסה. C יורשת מ-B (משאירה את i כפי שהוא) ומוסיפה foo(int) - עוד עומס עצמאי. D יורשת מ-B (מכפילה את i פי 2) ודורסת (override) את foo(B,int), וקוראת בתוכה ל-super/base.foo עם הפרמטר num קבוע (20) במקום זה שהתקבל.

public class A {
    protected int i;
    public A (int i) { this.i = i; }
}
-----------------------------------------------------------------------------------------------
public class B : A {
    public B (int i) : base (i + 1)   { }
    public  bool Foo (Object myObject)  {
        Console.WriteLine ("Foo1");
        return ((myObject is B) && (this.i == ((B)myObject).i));
    }
    public virtual bool Foo (B myB, int num)  {
        Console.WriteLine ("Foo2");
        return (this.i +  myB.i)  <  num;
    }
}
-----------------------------------------------------------------------------------------------
public class C : B {
    public C (int i) : base (i) { }
    public bool Foo (int num)  {
        Console.WriteLine ("Foo3");
        return (this.i != num);
    }
}
-----------------------------------------------------------------------------------------------
public class D : B {
    public D (int i) : base (i * 2) { }
    public override bool Foo (B myB, int num)    {
        Console.WriteLine ("Foo4");
        return base.Foo (myB, 20 );
    }
}

// --- המחלקה Tester (סעיף ב) ---
public class Tester {
    public static void Main (string[] args) {
        A a = new A (1);
        B b = new B (2);
        C c = new C (3);
        D d = new D (4);
        B bd = new D (5);
        A ac = new C (6);
        //***
    }
}
סעיף א

סרטטו את תרשים ההייררכייה של המחלקות A , B , C , D . יש לסמן ירושה באמצעות החץ ◁——— .

סעיף ב(1)

נתונה המחלקה Tester : [הקוד ב-code_context] סרטטו את העצמים שנוצרו בפעולה main .

סעיף ב(2)

במקום המסומן ב־*** נוסף קטע הקוד התקין שלפניכם: System.out.println (c.foo(5)); //(1) System.out.println (d.foo(a)); //(2) System.out.println (bd.foo(b)); //(3) System.out.println (bd.foo(b, 1)); //(4) System.out.println (((C)ac).foo(c)); //(5) כתבו את הפלט של הפעולה (כתבו את מספר השורה המשויך לכל פלט).

Console.WriteLine (c.Foo(5)); //(1) Console.WriteLine (d.Foo(a)); //(2) Console.WriteLine (bd.Foo(b)); //(3) Console.WriteLine (bd.Foo(b, 1)); //(4) Console.WriteLine (((C)ac).Foo(c)); //(5)

שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי