אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2025 · קיץ מועד ב · שאלה 8כל שאלות המבחן ←
תכנות מונחה עצמיםירושה

בפרויקט מוגדרות שש מחלקות: A, B, C, D, E ו-Test. כל אחת בקובץ נפרד.

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

public class A
{
    protected int x;
    protected int y;
    public A() {
        x = 0;
        y = 1;
    }
    public A(int a) : this(a, a){
    }
    public A(int a, int b){
        y = a * b;
    }
    public virtual void Func(D d){ } // 1
    public virtual void Func(B b){ } // 2
} //end of class A
public class B : A
{
    protected int z;
    public B(int b) : base(b + 1){
        x = b;
        z = b * 2;
    }
    public virtual void Func(A a){ } // 3
    public override void Func(B b){ } // 4
} //end of class B

public class C : A
{
    protected int t;
    public virtual void Func(A a){ } // 5
    public override void Func(B b){ } // 6
} //end of class C
public class D : B
{
    public D(int d): base(d+2){
    }
    public override void Func(A a) { } //7
    public override void Func(B b) { } //8
} //end of class D
public class E : C
{
    protected int w;
    public E(int num):base(){
        x = num;
        w = x + y;
    }
    public override void Func(A a){ } // 9
} //end of class E

public class Test {
    public static void main (string []args)
    {
        A ab =new B(2);
        A ae =new E(3);
        B bd =new D(2);
        C cc =new C();
        D dd =new D(4);
        // ****** //
    }
} //end of class Test
סעיף א

שרטטו את עץ הירושה למחלקות המוגדרות בפרויקט.

סעיף ב

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

אובייקטxyztw
A ab = new B(2);294איןאין
A ae = new E(3);30
B bd = new D(2);
C cc = new C();0
D dd = new D(4);49

⚠️ מיפוי התאים המדויק לעמודות/שורות שוחזר best-effort מהטקסט הליניארי של הטבלה (עמ' 12 C# / עמ' 24 Java) — יש לאמת מול עמוד המקור.

סעיף ג

בכל אחד מסעיפים הבאים השורה (*****) תוחלף בשורת קוד משורות הקוד 1–8. כתבו, עבור כל אחד מהסעיפים, אם הקוד תקין או לא. אם הקוד אינו תקין – יש להסביר למה הוא אינו תקין ולציין את סוג השגיאה (קומפילציה או זמן ריצה). אם הקוד תקין, כתבו מהו מספר הפעולה Func שתופעל. שימו לב שאין קשר בין סעיפים!

  1. ab.Func(bd);
  2. ((E)ae).Func (ab);
  3. ((B)dd).Func (bd);
  4. ((A)bd).Func (ae);
  5. ((E)cc).Func (bd);
  6. bd.Func(ae);
  7. cc.Func(cc);
  8. ((D)ab).Func(dd);
שאלות ותגובות על השאלה

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

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

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