אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2025 · קיץ מועד א · שאלה 3כל שאלות המבחן ←
תכנות מונחה עצמיםירושה

בשאלה זו שלושה סעיפים. אין קשר בין הסעיפים.

סעיף א

נתונה פעולה ראשית במחלקה Test. (1) שרטטו את עץ הירושה עבור שתי אפשרויות היררכיות בין המחלקות כך שהפעולה הראשית תהיה תקינה והתוכנית תרוץ ללא שגיאות. (2) רוצים להוסיף בסוף התוכנית את שורת הקוד: Q q1 = (Q) p1; האם התוכנית הראשית תהיה תקינה עבור שתי האפשרויות שציינתם? אם לא – מהו סוג השגיאה שתתרחש?

codeBlock:

public class Test {
    public static void Main(string[] args){
        S s1 = new R();
        P p1 = (P)(new R());
        S s2 = new P();
        P p2 = new Q();
//      (*****)
    }
}

appendedLineHebrew: Q q1 = (Q) p1;

סעיף ב

לפניכם המחלקות First, Second. במחלקות Program-ו First, Second חסר מימוש בנאים ופעולות ToString. השלימו את הפעולות במחלקות First-ו Second כך שאחרי הרצת הפעולה הראשית של המחלקה Program יתקבל הפלט הנתון.

givenStubs:

public class First {
 private static int c = 0;
 protected int num;
 public First(int num){...}
 public override string
            ToString(){...}
} // stub — body to complete

givenStubsSecond:

public class Second : First{
 private char ch;
 public Second(int num, char ch):
        base(num){...}
 public override string
            ToString(){...}
} // stub — body to complete

programAndExpectedOutput:

public class Program{
 public static void Main(string[] args) {
  First f1 = new First(10);
  Console.WriteLine("f1 is "+f1);
  First f2 = new Second(3,'A');
  Console.WriteLine("f2 is "+f2);
  First f3 = new Second(4,'Z');
  Console.WriteLine("f3 is "+f3);
  First f4 = new First(7);
  Console.WriteLine("f4 is "+f4);
 }
}

expectedOutput: [f1 is 1-10, f2 is 2-6-A, f3 is 3-12-Z, f4 is 4-28]

סעיף ג

לפניכם קוד המחלקה Two. המחלקה יורשת מהמחלקה One. כתבו במחלקה One את התכונות והפעולות הנדרשות. יש לציין הרשאת גישה (public, protected, private) לכל תכונה ולכל פעולה. אין צורך לממש את הפעולות. אין לשנות את הקוד של המחלקה Two.

codeBlock:

public class Two : One
{
    private int z;
    public Two()
    {
        this.z = 11;
    }

    public Two(string s1, int z): base(s1)
    {
        this.z = z;
    }

    public override double P1(int a)
    {
        return a * base.P1(a);
    }

    public int P2()
    {
        return One.w + this.M();
    }

    public void Print()
    {
        One.D();
        Console.WriteLine(s+" SON");
    }
}
שאלות ותגובות על השאלה

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

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

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