Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaErvin Barta Megváltozta több, mint 10 éve
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(...) {…}
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.