סעיף א' עוסק בכתיבת בנאים למחלקות First ו-Second כך שהרצת פעולה ראשית נתונה תיצור עצמים עם ערכי תכונות נתונים. סעיף ב' בודק תקינות (קומפילציה/זמן ריצה) של שמונה קטעי קוד המשתמשים בהמרות טיפוס על עץ ירושה נתון (Shape/Square/Triangle/Circle/Cylinder).
סעיף א' עוסק בכתיבת בנאים למחלקות First ו-Second כך שהרצת פעולה ראשית נתונה תיצור עצמים עם ערכי תכונות נתונים. סעיף ב' בודק תקינות (קומפילציה/זמן ריצה) של שמונה קטעי קוד המשתמשים בהמרות טיפוס על עץ ירושה נתון (Shape/Square/Triangle/Circle/Cylinder).
public class First
{
protected int num;
....
}
public class Second : First
{
private double x;
private First f;
...
}
public class Test
{
public static void Main(string[] args)
{
First[] arr = new First[5];
arr[0] = new First (13);
arr[1] = new First ();
arr[2] = new Second();
arr[3] = new Second(5, arr[0]);
arr[4] = new Second(2, 3.7, arr[2]);
}
}
חמשת העצמים שנוצרו בהרצת main (סעיף א') — הערכים המבוקשים בכל תא של arr.
arr[0]: First{num=13} | arr[1]: First{num=10} | arr[2]: Second{num=10,x=1.1,f=null} | arr[3]: Second{num=5,x=5.5,f→First{num=13}} | arr[4]: Second{num=5,x=5.5,f→(אותו עצם First{num=13} כמו arr[3])}
עץ הירושה לסעיף ב': Shape הוא השורש; Square, Triangle, Circle יורשות ישירות מ-Shape; Cylinder יורשת מ-Circle.
Shape
├── Square
├── Triangle
└── Circle
└── Cylinder
לפניכם כותרות המחלקות Second, First ותכונות שלהן ומחלקה Test הכוללת פעולה ראשית (ראו code_context). הרצת הפעולה יצרה את העצמים המתוארים (ראו איור). כתבו במחלקות First ו-Second את הפעולות הבונות (constructors) הנדרשות לשם הרצת הפעולה הראשית כך שיתקבלו העצמים המתוארים.
נתון עץ הירושה הבא (ראו איור). לפניכם קטע קוד מתוך פעולה ראשית (אותו קוד, תחביר C#): Shape s1 = new Shape(); Shape s2 = new Circle(); Shape s3 = new Cylinder(); Circle c = new Cylinder(); לפניכם שמונה קטעי קוד — אותם שמונה קטעים בדיוק (מותאמים לתחביר C#, ההמרות מפורשות זהות). יש לציין עבור כל אחד אם תקין או לא, ואם לא — קומפילציה או זמן ריצה.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.