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

B יורשת מ-A ודורסת f ו-g. A.g קוראת ל-f() על this (קריאה וירטואלית — מתפזרת לגרסה של B בזמן ריצה, לפי הטיפוס האמיתי, לא המוצהר). B.superG עוקפת את הדריסה במפורש עם super.g() וקוראת דווקא לגרסת A של g — אבל בתוכה, ה-f() הפנימית עדיין וירטואלית ומתפזרת ל-B.f.

class A{
    public virtual void F() {
        Console.WriteLine("A.F");
    }
    public virtual void G() {
        F();
    }
}
public class B : A{
    public override void F(){
        Console.WriteLine("B.F");
    }
    public override void G() {
        Console.WriteLine("B.G");
    }
    public void SuperG() {
        base.G();
    }
}
סעיף א

נתון קטע הקוד הבא: A a = new A(); B b = new B(); A ab = new B(); a.F(); ab.F(); b.F(); a.G(); ab.G(); b.G(); ((B)(ab)).SuperG(); b.SuperG(); עקבו אחרי ביצוע קטע הקוד ורשמו מה יהיה הפלט.

סעיף ב

האם אפשר להוסיף לקטע הקוד את שתי הפקודות הבאות? a.SuperG(); ((B)a).SuperG(); הסבירו את תשובתכם.

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

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

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

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