מבני נתוניםתכנות מונחה עצמיםירושה
שאלה מתוך המבחן הרשמי · מבחן 2024 · קיץ מועד א · שאלה 15

לפניכם כותרות המחלקות AA, BB והתכונות שלהן. הפעולות הבונות של המחלקות מסומנות ב-*** (ייתכנו מספר פעולות בנייה, אחת למחלקה). לשתי המחלקות אין פעולות get/Get ו-set/Set. לפניכם מחלקה Test עם פעולה ראשית שיוצרת עשרה עצמים (a1..a5, b1..b5), ותרשים זיכרון המתאר את המצב הסופי של כל אחד מהעצמים הללו. יש לכתוב במחלקות AA ו-BB את הפעולות הבונות הנדרשות כדי לקבל את העצמים שמתוארים.

public class AA
{
    private int x;
    ***
}

public class BB : AA
{
    private AA f;
    ***
}

public class Test{
    public static void Main(string[] args) {
        AA a1 = new AA ();
        AA a2 = new AA (8);
        AA a3 = new AA (3);
        AA a4 = new AA (a1);
        AA a5 = new AA (a2);
        BB b1 = new BB ();
        BB b2 = new BB (6, a4);
        BB b3 = new BB (5, a2);
        BB b4 = new BB (a4);
        BB b5 = new BB (a2);
    }
}

תרשים הזיכרון הסופי של עשרת העצמים. a1..a5 מטיפוס AA עם ערך x בלבד. b1..b5 מטיפוס BB, כל אחד עם x (מוריש, לא מוצג כתכונה נפרדת אלא כחלק מהעצם) ו-f. b2,b3: f מצביע לאותו עצם כמו a4/a2 (בהתאמה - מוצג כטקסט f=a4 / f=a2). b4,b5: f מצביע לעצם AA חדש ונפרד, שערך ה-x שלו שווה לזה של a4/a2 בהתאמה (מוצג כחץ לתיבת AA נפרדת).

a1:AA{x=2}  a2:AA{x=8}  a3:AA{x=3}  a4:AA{x=2}  a5:AA{x=8}
b1:BB{x=1,f=null}
b2:BB{x=6,f=a4}          (אותו עצם כמו a4)
b3:BB{x=5,f=a2}          (אותו עצם כמו a2)
b4:BB{x=0,f->AA{x=2}}    (עצם AA חדש, ערך זהה ל-a4.x)
b5:BB{x=0,f->AA{x=8}}    (עצם AA חדש, ערך זהה ל-a2.x)
סעיף א

כתבו במחלקה AA את הפעולות הבונות הנדרשות כדי לקבל את העצמים a1..a5 שמתוארים בתרשים (a1=new AA(), a2=new AA(8), a3=new AA(3), a4=new AA(a1), a5=new AA(a2)). ציינו עבור כל אחד מהעצמים שנוצרו את הפעולה הבונה המתאימה לו.

AA(); AA(int x); AA(AA other);

סעיף ב

כתבו במחלקה BB את הפעולות הבונות הנדרשות כדי לקבל את העצמים b1..b5 שמתוארים בתרשים (b1=new BB(), b2=new BB(6,a4), b3=new BB(5,a2), b4=new BB(a4), b5=new BB(a2)). שימו לב: לתכונה x, שהיא private במחלקת האב AA, אין גישה ישירה מתוך BB - יש להיעזר בפעולות הבונות של AA (סעיף א) באמצעות super/base. ציינו עבור כל אחד מהעצמים שנוצרו את הפעולה הבונה המתאימה לו.

BB(); BB(int x, AA a); BB(AA a);

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

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

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

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