נתונות המחלקות A, B, C הבאות:
נתונות המחלקות A, B, C הבאות:
public class A
{
private static int countA = 0;
protected int x;
public A()
{
countA++;
this.x = 0;
}
public A(int x)
{
countA++;
this.x = x;
}
public override string ToString()
{
return "A:"+this.x;
}
public virtual int DoIt(int z)
{
return this.x * z;
}
public static int GetCount(){ return countA; }
}// end of class A
public class B : A
{
protected int y;
private static int countB = 0;
public B(int y)
{
this.y = y;
countB++;
}
public B(int x, int y):base(x)
{
countB++;
this.y = y;
}
public override string ToString()
{
return "B:"+base.ToString ()+":"+this.y;
}
public static new int GetCount(){return countB;}
public override int DoIt(int z)
{
return base.DoIt(z) + this.y;
}
} //end of class B
public class C : B
{
private A myA;
private static int countC = 0;
public C(int x, int y): base(x, y)
{
this.myA = new A(x+y);
countC++;
}
public static new int GetCount(){return countC;}
public override string ToString()
{
return "C:"+base. ToString()+" ["+this.myA+"]";
}
}// end of class C
סעיף א
ציירו תרשים UML שמייצג את הקשרים בין המחלקות A, B, C. יש לסמן ירושה באמצעות חץ והכלה באמצעות סימן.
סעיף ב
נתון קטע הקוד הבא, בפעולה הראשית במחלקה אחרת. עקבו אחרי ביצוע קטע הקוד. יש לצייר את כל העצמים שנוצרו ולציין את התכונות שלהם.
A[] arr = new A[5];
arr[0] = new A(13);
arr[1] = new B(5, 10);
arr[2] = new C(2, 7);
arr[3] = new C(3, 3);
arr[4] = new B(5);
סעיף ג
לקוד של סעיף ב' התוסף הבא, רשמו מה יהיה הפלט בהתאם:
Console.WriteLine("A objects: " + A.GetCount());
Console.WriteLine("B objects: " + B.GetCount());
Console.WriteLine("C objects: " + C.GetCount());
סעיף ד
לקוד של סעיף ב' התוסף הבא, רשמו מה יהיה הפלט:
for (int k=0; k < arr.Length; k++)
Console.WriteLine(arr[k]);
סעיף ה
for (int k=0; k <arr.Length; k++)
if(arr[k] is B)
Console.WriteLine(arr[k].DoIt(k+1));
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.