אתם מתרגלים שאלה מתוך בגרות מדעי המחשב — מבני נתונים (שאלון 899271)מבחן 2026 · קיץ מועד Special · שאלה 10כל שאלות המבחן ←
תכנות מונחה עצמים›מחלקות ואובייקטים

לפניכם כותרות המחלקות BB, CC והתכונות שלהן, ולפניכם המחלקה Tester הכוללת פעולה ראשית:

public class BB {
  private int a;
  protected int b;
  ****
}
public class CC: BB {
  private int c;
  ****
}

public class Tester {
  public static void Main(string[] args) {
    BB [] b = new BB[8];
    b[0] = new BB();
    b[1] = new BB(16);
    b[2] = new BB(b[0]);
    b[3] = new BB(b[1]);
    b[4] = new CC(9);
    b[5] = new CC(5);
    b[6] = new CC(b[0]);
    b[7] = new CC(b[1]);
  }
}

הערה: שימו לב – לשתי המחלקות אין פעולות Get ו-Set.

לפניכם תרשים עצמים שנוצרו בעקבות הרצת קטע הקוד:

תא 0: BB  a=10, b=1
תא 1: BB  a=10, b=16
תא 2: BB  a=10, b=1
תא 3: BB  a=10, b=16
תא 4: CC  a=10, b=9, c=7
תא 5: CC  a=10, b=5, c=7
תא 6: CC  a=10, b=1, c=19
תא 7: CC  a=10, b=16, c=19
סעיף א

לפניכם תרשים עצמים שנוצרו בעקבות הרצת קטע הקוד. מצב האובייקטים במערך b[0..7] לאחר ההרצה מפורט בטבלה שלהלן:

אינדקסמחלקהabc
b[0]BB101—
b[1]BB1016—
b[2]BB101—
b[3]BB1016—
b[4]CC1097
b[5]CC1057
b[6]CC10119
b[7]CC101619

כתבו במחלקות BB ו-CC את הפעולות הבונות הנדרשות כדי לקבל את העצמים שבטבלה. ציינו בעבור כל אחד מן העצמים שבטבלה את הפעולה הבונה על פיה הוא נוצר. הערה: אין להוסיף פעולות שאינן בונות במחלקות BB ו-CC. פתרון הכולל פעולות שאינן בונות לא יזוכה בנקודות.

סעיף ב

נתון קטע קוד תקין והפלט שהתקבל בעקבות הרצתו. כמו כן, נתון קטע קוד עבורו התקבלה שגיאת הידור (קומפילציה). ממשו את הפעולות Goo ו-Foo במחלקות המתאימות (BB ו-CC) על פי עקרונות תכנות מונחה עצמים, כך שיתקבל הפלט שלפניכם (יש לממש במחלקות רק את הפעולות הנחוצות כדי שהקוד ירוץ).

קטע הקוד התקין (בסוף הפעולה הראשית, אחרי יצירת שמונת העצמים):

b[0].Foo(0);          //1
b[0].Foo(3);          //2
((CC)b[4]).Foo();     //3
((CC)b[6]).Foo();     //4
((CC)b[5]).Goo();     //5
((CC)b[7]).Goo();     //6

הפלט שהתקבל:

BB Foo: 11    //1
BB Foo: 14    //2
CC Foo: 7     //3
BB Foo: 26
CC Foo: 19    //4
BB Foo: 30
CC Goo        //5
CC Goo        //6

קטע הקוד שעבורו התקבלה שגיאת הידור:

b[3].Foo();
b[2].Goo();
שאלות ותגובות על השאלה

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

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

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