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