1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia
2 Mezőhozzáférés struct : egység van, de alapértelmezésben nincs egységbezárás: minden mező publikus class : egységbezárás van: alapértelmezésben minden mező privát private: csak az osztály elemei érhetik el és az esetleges barátok protected: az osztály és leszármazottainak mezői érik el public: kívülről hozzáférhető
3 Mezőhozzáférés öröklése publikus : a mezőhozzáférés változatlanul öröklődik. struct öröklődés esetén ez az alapértelmezés. védett : minden mező védett lesz, kivéve a privát privát : minden mező privátra módosul az öröklődés során, amihez hozzá szeretnénk férni annak módosítani kell a mezőhozzáférését. A class alapértelmezése. Célszerű nem hagyatkozni az alapértelmezésre, hanem explicite megadni az öröklődés módját.
4 Öröklött mezőhozzáférés felülbírálata Az örökölt hozzáférési típus elfedhető: a származtatott osztályban: ugyanazzal a névvel a kívánt elérhetéssel deklarálunk egy változót a származtatott osztályban: private/protected/public: eredetiváltozónév; a kívánt elérhetésű változók között felsoroljuk az öröklött változót hatókör operátorral: private/protected/public: alaposztály::változó;
5 Virtuális tagfüggvények Virtuális tagfüggvények : olyan öröklött (public v. protected) tagfüggvényei az alaposztálynak, melyeket a származtatott osztályokban újradefiniálunk így az osztály viselkedését megváltoztatjuk: a polimorfizmus egy megtestesülése. Általában az alaposztály referenciáján keresztül hívódik meg, de csak a futáskor rendelődik az aktuális függvény a referenciához: ez a késői kötés v. dinamikus összerendelés
6 Virtuális tagfüggvények példa: class alap { … public: virtual int fvnév (); }; tisztán virtuális, ha egyáltalán nem szerepel a virtuális függvény definíciója az alaposztályban: virtual int fvnév ()=0;
7 Virtuális tagfüggvények A tagfüggvények virtuális mivolta öröklődik: a leszármazott osztályokban nem szükséges kiírni, hogy virtuális tagfüggvényről van szó. A virtuális tagfüggvények típusa megegyezik az alap-függvény típusával: ugyanolyan neve és ugyanolyan bemeneti és kimeneti paraméterlistája kell, hogy legyen. Ha nem egyezik pontosan túlterhelés ről avagy operator overloading ról beszélünk.
8 Túlterhelés operátorfüggvény: legalább egy paraméterük osztály vagy struktúra típusú. Általában osztályokon belül adjuk meg őket vagy friend mechanizmussal. Ugyanahhoz a névhez többféle paraméterlistával is definiálunk függvényt, más és más tartalommal; pl. attól függően, hogy milyen típussal hívjuk meg, más és más lesz a kimeneti típus is.
9 Többszörös öröklődés class Alap_i { private: privát változók _i; protected: védett változók _i; public: publikus változók _i; tagfüggvények _i; }; i=1,2,…
10 Többszörös öröklődés class Származtatott: public Alap_1, public Alap_2, … { private: privát változók _újak/felülírtak; public: publikus változók _újak/felülírtak; tagfüggvények _újak/felülírtak; };
11 Többszörös öröklődés class Származtatott: public Alap_1, public Alap_2, … { private: privát változók _újak/felülírtak; public: publikus változók _újak/felülírtak; tagfüggvények _újak/felülírtak; };
12 Konstruktor class osztálynév { private: privát változók ; public: publikus változók ; típus tagfüggvények ; osztálynév(típusok,változók); }; Nincs típusa a konstruktornak és ugyanaz a neve, mint az osztálynak
13 Konstruktor class osztálynév { private: privát változók ; public: publikus változók ; típus tagfüggvények ; osztálynév(típusok,változók); }; Hivatkozás: osztálynév::osztálynév()…
14 Destruktor Felszabadítja az adattípus álltal elfoglalt területet: class osztálynév { private: privát változók ; public: publikus változók ; típus tagfüggvények ; konstruktor; ~osztálynév(void); };
15 Destruktor Felszabadítja az adattípus álltal elfoglalt területet: class osztálynév { private: privát változók ; public: publikus változók ; típus tagfüggvények ; konstruktor; ~osztálynév(void); };
16 Mezőhozzáférés struct : egység van, de alapértelmezésben nincs egységbezárás: minden mező publikus class : egységbezárás van: alapértelmezésben minden mező privát private: csak az osztály elemei érhetik el és az esetleges barátok protected: az osztály és leszármazottainak mezői érik el public: kívülről hozzáférhető