תרשים המבנה (א') ואז מעקב מלא (ב') אחרי אותו קוד בדיוק — משלב מונים סטטיים חוצי-עצמים, סדר-קריאה של super בבנאים, והבדל מכריע בין פעולה שכן נדרסת (doIt) לפעולה שלא (print ב-B).
תרשים המבנה (א') ואז מעקב מלא (ב') אחרי אותו קוד בדיוק — משלב מונים סטטיים חוצי-עצמים, סדר-קריאה של super בבנאים, והבדל מכריע בין פעולה שכן נדרסת (doIt) לפעולה שלא (print ב-B).
class A
{
private static int countA = 0;
protected int n;
public A(int n1)
{
this.n = n1;
A.countA++;
Console.WriteLine(A.countA + " " + this.n);
}
public int GetN()
{
return this.n;
}
public virtual void DoIt()
{
for (int i = 0; i < this.n; i++)
Console.Write(i + ",");
Console.WriteLine();
}
public virtual void Print()
{
Console.WriteLine(this.n);
}
}
class B : A
{
private static int countB = 0;
public B(int n2) : base(n2)
{
B.countB++;
Console.WriteLine(B.countB + " " + n2);
}
public override void DoIt()
{
Console.WriteLine("B Does It!");
}
}
class C : B
{
private static int countC = 0;
private A a;
public C(int n1, int n2) : base(n1)
{
this.a = new A(n2);
countC++;
Console.WriteLine("C is " + (a.GetN() + this.n));
}
public override void Print()
{
base.Print();
this.a.Print();
}
}
class Test
{
private A[] arr;
public Test()
{
arr = new A[3];
arr[0] = new A(4);
arr[1] = new B(2);
arr[2] = new C(1, 6);
}
public void TestIt()
{
for (int i = 0; i < arr.Length; i++)
{
arr[i].DoIt();
arr[i].Print();
}
}
}
סעיף א
בנו תרשים מחלקות UML (הכולל קשרים) עבור ארבע המחלקות המוצגות בשאלה. על התרשים לכלול את שמות המחלקות ואת הקשרים ביניהן.
סעיף ב
לפניכם קטע קוד: public static void Main(string[] args) { Test test = new Test(); test.TestIt(); } עבור קטע קוד זה בצעו והציגו את פלט הקטע (חובה להציג מעקב).
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.