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

שלוש מחלקות B, C, D (C extends B, D extends B). ל-C יש דריסה של equals(Object) (מ-Object); ל-D יש העמסה חדשה equals(D) שאינה דורסת את equals(Object) המובנית. סעיפים ב'-ג' מתבססים על הפעולה הראשית של Program.

public class B {
    protected int num;
    public B(int num) { this.num = num; }
} // end of B

public class C : B {
    public C(int num) : base(num) { }
    public override bool Equals(Object other) {
        return ((other != null) && (other is C) && (num == ((C) other).num));
    }
} // end of C

public class D : B {
    public D(int num) : base(num + 1) { }
    public bool Equals(D other) {
        return ((other != null) && (num == other.num));
    }
} // end of D

הפעולה הראשית של Program — 6 השורות הראשונות זהות בכל סעיפי ג'; השורה (*****) מוחלפת בכל פעם באחת מארבע שורות הקוד (הסעיפים אינם קשורים זה לזה).

public class Program {
    public static void main(String[] args) {
        B b = new B(1);
        C c = new C(1);
        D d = new D(1);
        B b1 = new D(1);
        Object c1 = new C(1);
        Object d1 = new D(1);
        (*****)
     }
}
סעיף א

האם קיימת דריסה (overriding) או העמסה (overloading) של הפעולות? הסבירו את תשובתכם.

סעיף ב

עקבו אחרי ביצועה (הפעולה הראשית שבאיור) וציינו מהם העצמים שנוצרו. עבור כל עצם יש להציג את ערך תכונת ה-num שלו.

סעיף ג

בכל אחד מהסעיפים הבאים השורה (*****) תוחלף בשורת קוד משורות הקוד 1-4. כתבו בעבור כל אחד מהסעיפים מה יהיה הפלט ואיזו מהפעולות Equals תופעל. שימו לב שאין קשר בין הסעיפים!

  1. Console.WriteLine(b1.Equals(b));
  2. Console.WriteLine(c1.Equals(c));
  3. Console.WriteLine(d1.Equals(d));
  4. Console.WriteLine(d.Equals((D)d1));
שאלות ותגובות על השאלה

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

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

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