Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.

Hasonló előadás


Az előadások a következő témára: "Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék."— Előadás másolata:

1 Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék

2 Ficsor Lajos Virtuális bázisosztály CPP6 / 2 Többszörösen örökölt bázisosztály Egy osztály származtatási listájában csak egyszer szerepelhet egy bázisosztály Ennek ellenére a többszörös öröklődés lehetősége miatt egy bázisosztály többször is előfordulhat egy leszármazott osztályban. Egyszerű példa: "gyémánt" öröklési szerkezet

3 Ficsor Lajos Virtuális bázisosztály CPP6 / 3 Példa Egy fuvarozó vállalkozó járművei:

4 Ficsor Lajos Virtuális bázisosztály CPP6 / 4 Példa (folyt.) A járműszerelvény modellje:

5 Ficsor Lajos Virtuális bázisosztály CPP6 / 5 Példa (folyt.) A teljes osztálydiagram:

6 Ficsor Lajos Virtuális bázisosztály CPP6 / 6 Egy szerelvény objektum szerkezete Tulajdonos rész Teherautó saját rész Pótkocsi saját rész Szerelvény saját rész Tulajdonos rész Tulajdonos Teherauto Potkocsi Tulajdonos Szerelvény

7 Ficsor Lajos Virtuális bázisosztály CPP6 / 7 Felmerülő kérdések A tulajdonos rész kétszer épül be az objektumba. Szemantikailag indokolt-e? Jelen példánkban nem indokolt => fölösleges helyfoglalás Kétértelmű hivatkozás - feloldható a SCOPE operátorral A nev vagy Tulajdonos::nev azonosító kétértelmű A Teherauto::nev vagy Potkocsi::nev egyértelmű

8 Ficsor Lajos Virtuális bázisosztály CPP6 / 8 Virtuális bázisosztály Ha szemantikailag nem indokolt az ismétlődés: virtuális bázisosztály Előírása: a virtual kulcssszó az öröklődés módját előíró kulcssszó előtt. Példa: class Tulajdonos {…}; class Teherauto: virtual public Tulajdonos {…}; class Potkocsi: virtual public Tulajdonos {…}; class Szerelveny: public Teherauto, public Potkocsi {…};

9 Ficsor Lajos Virtuális bázisosztály CPP6 / 9 Virtuális öröklődés implementálása A virtuális bázisosztályból egy (megosztva használt) objektum keletkezik valamennyi leszármazott osztály számára. Az osztott objektum nem érhető el közvetlenül. A virtuális bázisosztály tagjaira bármely leszármazott osztály objektuma hivatkozhat. Az egyes leszármazott osztályok az osztott objektumot pointeren keresztül érik el.

10 Ficsor Lajos Virtuális bázisosztály CPP6 / 10 Virtuális öröklődés implementálása (példa) Pointer Teherautó saját rész Pótkocsi saját rész Szerelvény saját rész Tulajdonos Teherauto Potkocsi Tulajdonos Szerelvény Pointer Tulajdonos rész

11 Ficsor Lajos Virtuális bázisosztály CPP6 / 11 Virtuális bázisosztály konstruktora Először mindig a virtuális bázisosztály konstruktora hajtódik végre. Mindig az utolsó leszármazott osztály inicializálhatja a virtuális bázisosztályt. Ezért az ilyen leszármazott - kivételesen - nem csak a közvetlen ősét inicializálhatja! Példa: Szerelveny::Szerelveny(...) : Tulajdonos(...) {…}


Letölteni ppt "Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék."

Hasonló előadás


Google Hirdetések