Hirdetés

Új hozzászólás Aktív témák

  • mgoogyi

    senior tag

    válasz pvt.peter #2057 üzenetére

    röviden:
    polimorf osztályoknál van értelme, amikor specializálod a működését az ősosztálynak és minden leszármazottat kezelhetsz úgy, mint ha az egy ősosztálybeli objektum lenne.
    pl. minden almát és körtét kezelhetsz gyümölcsként
    pl. Akkor van ennek haszna, mikor van egy rakás valamilyen gyümölcsöd mondjuk egy halmazban és együtt akarod kezelni őket, mert pl. az adott helyzetben számodra nem lényeg, hogy milyen specializált gyümölcsről van szó.

    Amikor örökölsz, akkor a virtuális függvények mindig befigyelnek!

    hosszan:

    class Gyumolcs
    {
    ...
    virtual void print() {printf("gyumolcs")}
    ...
    };

    class Alma() : public Gyumolcs
    {
    ...
    virtual void print() {printf("alma")}
    ...
    };

    class Korte() : public Gyumolcs
    {
    ...
    virtual void print() {printf("korte")}
    ...
    };

    Gyumolcs * a = new Alma();
    a->print(); //azt írja ki, hogy alma, pedig ez egy Gyumolcs pointer
    /*mivel: a virtuális függvényeknél futási időben dől el (dinamikusan), hogy mi hívódik (megnézi, hogy valójában milyen objektumról van szó és annak a függvényét hívja - a háttérben egyébként van az objektumnak egy virtuális táblája és abból nézi ki, hogy mit kell hívni)
    ha nem virtuális lenne a függvény, akkor fordítási időben (statikusan dőlne el, mit kell hívni és "gyumolcs" íródna ki)*/

Új hozzászólás Aktív témák