1 / 12

Programozás II.

Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények, absztrakt osztályok. Adattagok inicializálása. Az adattagokat általában a konstruktorban szokás inicializálni . Egyik megoldás, amikor az inicializálást a konstruktor belsejében tesszük .

reeves
Download Presentation

Programozás II.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozás II. 5. GyakorlatÖröklődés, virtuális függvények, absztrakt osztályok

  2. Adattagok inicializálása Az adattagokat általában a konstruktorban szokás inicializálni. Egyik megoldás, amikor az inicializálást a konstruktor belsejében tesszük. Másik megoldás egy kicsit függvény szintaxist követ: private: int param_a; int param_b; public: Konstruktor( int a, int b ) : param_a(a), param_b(b){}

  3. Öröklődés Olyan osztályok között értelmezett viszony, amely segítségével egy általánosabb típusból (ősosztály) egy sajátosabb típust tudunk létrehozni (utódosztály). Az utódosztály adatokat és műveleteket viselkedésmódot örököl, kiegészíti ezeket saját adatokkal és műveletekkel, illetve felülírhat bizonyos műveleteket. A kód újrafelhasználásának egyik módja. Megkülönböztetünk egyszeres és többszörös örökítést.

  4. Öröklődés Szintaxis: classChildrenClass: visibilityParentClass{}; Gyerek osztály konstruktorában meg kell hívni az ős osztály konstruktorát a következőképpen: public: ChildrenClass( int param) : Parent( param){}

  5. Öröklődés Láthatóság használatával csak szigorítani lehet az öröklődést.

  6. Többszörös öröklődés Nem egy, hanem több osztályból örököltetünk, szintaxis: ChildrenClass: visibility Parent1, visibility Parent2, … Gyerek konstruktorban meg kell hívni az ős osztályok konstuktorát: public: ChildrenClass( int param) : Parent1( param), Parent2( param), …

  7. Ős adattagok elérése Minden adattagot elérünk amit az ős osztálytól örököltünk (kivéve a private). Ezeket felül is definiálhatjuk. Ha már felüldefiniáltunk egy metódust, és a metódust az osztályon belül bármilyen prefix nélkül használjuk, akkor a felülírt metódus fog meghívódni. Viszont ha ilyen esetben az ős osztály metódusát szeretnénk használni, akkor meg kell adni az elérési útvonalat: ParentClass::methodName(params..);

  8. Virtuális függvények Tegyük fel, hogy egy ős osztálybeli pointerrel mutatunk egy gyerek osztálybeli objektumra . Tegyük fel, hogy a gyerek osztályban felüldefiniáltunk egy függvényt. Ha az ős pointeren keresztül meghívjuk ezt a függvényt, akkor nem a felüldefiniált fog meghívódni, hanem az ős osztályban létrehozott függvény. Példa: Basic* basic = newChild; basic->Function(); //az ős metódusa fog meghívódni

  9. Virtuális függvények Ennek kiküszöbölésére találták ki a virtuális függvényeket. Minden olyan objektum, mely rendelkezik legalább egy virtuális függvénnyel, rendelkezik egy ú.n. virtuális ugró táblával, melyben a virtuális függvények ugrási címe szerepel. Ha hivatkozunk ősreferencián keresztül egy metódusra, ami virtuális, akkor a gyerek objektum ugró táblájából keresi ki a program a hívandó függvény címét.

  10. Virtuális függvények Virtuális függvény létrehozásának szintaxisa: virtualvisszatérési_típus függvénynév(paraméterek); Csak az ősosztályban kell kiírni a virtual szót.

  11. Pure virtual függvények Arra is van lehetőség, hogy egy újonnan létrehozott virtuális függvényt az adott osztályban nem implementáljuk. Szintaxisa: virtual visszatérési_típus metódusnév() = 0;

  12. Absztrakt osztályok Ha egy osztály rendelkezik legalább egy purevirtual függvénnyel, akkor azt absztrakt osztálynak nevezzük. Absztrakt osztályból nem lehet objektumot képezni, csak pointer vagy referencia lehet.

More Related