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

One: תכונה מוגנת x, f(x) מוסיפה ל-x, toString="x="+x. Two יורשת מ-One, דורסת f כך שהיא מחסירה ואז קוראת super.f (מוסיפה) — נטו ללא שינוי בקריאה בודדת. arr[5]=arr[1] יוצר alias (לא עצם חדש).

public class One {
    protected int x;
    public One(){ this.x = 1; }
    public One(int x) { this.x = x; }
    public virtual void F(int x) { this.x += x; }
    public override string ToString() { return "x=" + this.x; }
} // end of One

public class Two : One {
    public Two() : base(3) { }
    public Two(int x) { base.F(x); F(x); }
    public override void F(int x) { this.x -= x; base.F(x); }
} // end of Two

public class Tester {
    public static void Print(One[] arr) {
        for (int i=0; i < arr.Length; i++)
            Console.WriteLine(i+" "+arr[i]);
    }
    public static void DoF(One[] arr, int num) {
        for (int i=0; i < arr.Length; i++)
            arr[i].F(num);
    }
    public static void What(One[] arr) {
        int k=0;
        for (int i = 0; i < arr.Length; i++)
            if (arr[i] is Two) k++;
        k = arr.Length - k;
        Console.WriteLine("k = "+ k);
    }
    public static void Main(string[] args) {
        One[] arr = new One[6];
        arr[0]= new One();
        arr[1]= new One(3);
        arr[2] = new Two();
        arr[3] = new Two(2);
        arr[4] = new Two(5);
        arr[5] = arr[1];
        Print(arr);
        DoF(arr, 2);
        Print(arr);
        What(arr);
    }
}
סעיף א

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

סעיף ב

מה מבצעת הפעולה what/What?

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

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

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

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