Úlohy na procvičení

Virtuální metody

Co vypíše následující program? Jaké jsou typy proměnných b, d a d2?

namespace dedicnost;

class Base
{
    public void A() { Console.WriteLine("Base.A"); }

    public virtual void B() { Console.WriteLine("Base.B"); }

    public virtual void C() { Console.WriteLine("Base.C"); }
}

class Derived : Base
{
    public new void A() { Console.WriteLine("Derived.A"); }

    public override void B() { Console.WriteLine("Derived.B"); }

    public new void C() { Console.WriteLine("Derived.C"); }
}

class Program
{
    static void Main(string[] args)
    {
        var b = new Base();
        var d = new Derived();

        b.A();
        b.B();
        b.C();

        d.A();
        d.B();
        d.C();

        var d2 = (Base)d;
        d2.A();
        d2.B();
        d2.C();
    }
}

Učební výstupy

Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.

  • chápat význam klíčových slov virtual a override v kontextu virtuálních metod
    • umět vysvětlit, jak jsou virtuální metody implementované pomocí tabulky virtuálních metod (VMT)
  • umět vysvětlit pojmy “dědičnost” a “kompozice” v objektově orientovaném programování
  • umět implementovat diskrétní simulaci (discrete event simulation) podle zadaného popisu
    • vhodně reprezentovat události a jejich kalendář
    • vytvořit model zadaného problému (jeho reprezentaci pomocí programu)