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

Father מגדירה smile/run; Son יורשת ודורסת את שתיהן, מוסיפה work; GrandSon יורשת מ-Son, דורסת smile/run (לא work), מוסיפה play. כל שלוש הסעיפים בודקים הכרעת compile-time מול runtime.

public class Father {

    public Father(){
    }
    public virtual void Smile() {
        Console.WriteLine("Father is smiling");
    }
    public virtual void Run() {
        Console.WriteLine("Father is running");
    }
}

public class Son :Father {

    public Son(): base(){
    }
    public override void Smile() {
        Console.WriteLine("Son is smiling");
    }
    public override void Run() {
        Console.WriteLine("Son is running");
    }
    public virtual void Work() {
        Console.WriteLine("Son is working");
    }
}

public class GrandSon :Son {

    public GrandSon():base() {
    }
    public override void Smile() {
        Console.WriteLine("GrandSon is smiling");
    }
    public override void Run() {
        Console.WriteLine("GrandSon is running");
    }
    public void Play() {
        Console.WriteLine("GrandSon is playing");
    }
}
סעיף א

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

  1. Father f = (Son)(new GrandSon());
  2. Object o = new Son(); Father f = o;
  3. Father f = new Father(); Object o = f; GrandSon gs = (GrandSon)o;
סעיף ב

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

  1. Son s = new Father(); s.smile();
  2. Father f = new Son(); f.smile();
  3. Father f = new Son(); f.work();
  4. Son s = new GrandSon(); s.play();
  5. Father f = new GrandSon(); f.smile();
סעיף ג

עקבו אחרי קטע קוד הבא ורשמו מה יהיה הפלט. Father[] f = new Father[3]; f[0] = new Father(); f[1] = new Son(); f[2] = new GrandSon(); for (int i = 0; i < f.Length; i++) if (f[i] is Son) ((Son)f[i]).Run();

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

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

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

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