Startseite
>
5. Vererbung
>
5.4 Virtuelle Basisklassen
|
Zurück
Vor
|
|
|
|
-
Bei mehrfachen Vererbungen kann eine "Großeltern"-Klasse über die Basisklassen
mehrfach beerbt werden. Dann sind die Methoden der Großeltern ggf. auch mehrfach
vorhanden und müssen über die Basisklasse qualifiziert werden:
class Mensch { String name; };
class Mann: public Mensch {};
class Programmierer: public Mensch {};
class MannProgrammierer: public Programmierer, public Mann {};
Falsch:
MannProgrammierer.name ist nicht eindeutig.
Korrekt:
MannProgrammierer.Mensch::name
MannProgrammierer.Mann::name
Der MannProgrammierer hat zwei Namen!
- Um Vervielfältigungen im Rahmen von
Mehrfachvererbungen zu vermeiden kann beim
Status der Ableitung das Schlüsselwort "virtual" angegeben werden. Alle als virtual
deklarierten Klassen werden in der Hierarchie zusammengefasst:
class Frau: virtual public Mensch {};
class Programmierer: virtual public Mensch {};
class FrauProgrammierer: public Programmierer, public Frau {};
FrauProgrammierer.name ist eindeutig.
- virtual Klassen werden vom Konstruktor
der am weitesten abgeleiteten Klasse initialisiert
(im Beispiel von FrauProgrammierer). Lösung: ggf. default-Konstruktoren (protected) richtig
setzen.
|
|
|
|