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

לפניך המחלקות A ו-B extends A (B: A ב-C#), שלכל אחת שדה פרטי x נפרד (B מצהירה מחדש שדה x משלה — אינה משתמשת בזה של A). getX/GetX, tripleX/TripleX ו-sub/Sub דרוסות ב-B; doubleX/DoubleX ו-calc/Calc מוגדרות רק ב-A ואינן נדרסות; tenTimesX/TenTimesX ו-baseX/BaseX מוגדרות רק ב-B.

public class A {
    private int x;
    public A()         { this.x = 0; }
    public A(int x)     { this.x = x; }
    public virtual int GetX() { return x; }
    public void DoubleX()     { this.x = 2 * GetX(); }
    public virtual void TripleX() { this.x = 3 * GetX(); }
    public virtual void Sub()     { this.x = x - 1; }
    public void Calc()   { Sub(); }
    public override string ToString() { return "xA=" + this.x; }
}
public class B : A {
    private int x;
    public B() : base()               { this.x = 1; }
    public B(int x) : base(x)          { this.x = -x; }
    public B(int xA, int xB) : base(xA) { this.x = xB; }
    public override int GetX() { return x; }
    public int BaseX() { return base.GetX(); }
    public void TenTimesX()        { this.x = 10 * GetX(); }
    public override void TripleX() { this.x = 3 * GetX(); }
    public override void Sub()     { this.x = x - 2; }
    public override string ToString() { return base.ToString() + " xB=" + this.x + ";"; }
}
סעיף א

לפניך סדרת הוראות שהפלט שלה צריך להיות: xA=1 xB=20; (ארבע פעמים, מופרד ברווחים). בסדרת ההוראות נפלה שגיאת הידור. תקן את השגיאה כדי שתתקבל הפלט הנכון: A a1 = new B(1, 20); Object obj = a1; B b1 = a1; A a2 = a1; System.out.println(a1+" "+obj+" "+a2+" "+b1);

סעיף ב

לפניך סדרת הוראות (aa=new B(3,10); aa.sub(); מערך Object בגודל 6 עם A(),A(5),B(),B(5),B(2,4) ואיבר aa; ואז ((A)ar[3]).tripleX(); ו-((B)ar[4]).tenTimesX();). הצג את העצמים הנוצרים ולכל עצם הצג עם ערכי התכונות שלו.

סעיף ג-i

בעבור a1=new A(1); a2=new B(2,99); בצע במקום //*** בפעולה הראשית: a2.doubleX(); System.out.println(a2); קבע אם הקטע תקין. אם תקין — כתוב את הפלט המתקבל.

סעיף ג-ii

בצע במקום //***: a2.tenTimesX(); System.out.println(a2.tenTimesX()); קבע אם הקטע תקין או אינו תקין; אם אינו תקין — קבע אם השגיאה היא שגיאת הידור או שגיאת זמן ריצה.

סעיף ג-iii

בצע במקום //***: if (a2 instanceof B) { a2.tenTimesX(); System.out.println(a2); } קבע אם הקטע תקין או אינו תקין; אם אינו תקין — קבע אם השגיאה היא שגיאת הידור או שגיאת זמן ריצה.

סעיף ג-iv

בצע במקום //***: ((B)a1).tenTimesX(); System.out.println(a1); קבע אם הקטע תקין או אינו תקין; אם אינו תקין — קבע אם השגיאה היא שגיאת הידור או שגיאת זמן ריצה.

סעיף ג-v

בצע במקום //***: a2.calc(); System.out.println(a2); קבע אם הקטע תקין. אם תקין — כתוב את הפלט המתקבל.

סעיף ג-vi

בצע במקום //***: B bb = (B)a2; System.out.println(bb.baseX()); קבע אם הקטע תקין. אם תקין — כתוב את הפלט המתקבל.

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

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

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

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