001
30.01.2006, 15:58 Uhr
virtual
Sexiest Bit alive (Operator)
|
Mehrfachvererbung bedeutet, daß eine Klasse mehr als eine Baisklasse haben kann. Dh
C++: |
class A: public B, public C, public D { };
|
Bedeutet, daß A von B, C und D abgeleietet ist. Daher werden auch - wenn ein A objekt rzeugt wird, entsprechende B, C, und D Objekte erzeugt.
Man kann die Sichtbarkeit der Vererbung einschränken, dh wenn ich schreibe
C++: |
class A: public B { };
|
Sind für den benutzer von A auch die Methoden von B sichtbar, dagegen bewrikt
C++: |
class A: private B { };
|
daß A die Methoden von B benutzen kann, ein Benutzer von A jedoch nicht mehr. Im Zusammenhang mit Mehrfachvererbung kann man diese Sichtbarkeit Pro Basisklasse festlegen.
Desweiteren kann man natürlich auch solche Dinge konstruieren:
C++: |
class Fahrzeug { };
class Auto : public Fahrzeug { };
class Schiff : public Fahrzeug { };
class AmphibienFahrzeug : public Auto, public Schiff { };
|
Bei dieser Vererbung hat ein AmphibienFahrzeug zwei FahrzeugInstanzen, weil es einmal die Fahrzeugeigenschaften von Auto, zum anderen von Schiff erbt. Je nach Klassendesign kann dies erwünscht oder unerwünscht sein. Stellt man sich etwa vor, daß in Fahrzeug sowas wie eine Seiennummer/Nummernschild usw. steht, so sind die ja für beide Instanzen eigentlich glich. Stellt man sich hingegen vor, daß dort Informationen über den Antrieb enthalten sind, so wären sie verm. verschieden (Schiff hat Schiffsmotor, Auto eben einen Automotor). Je nach dem was du willst, kannst Du erzwingen, daß sich Auto und Schiff in einem Amphibienfahrzeug eine Fahrzeug instanz teilen:
C++: |
class Fahrzeug { };
class Auto : virtual public Fahrzeug { };
class Schiff : virtual public Fahrzeug { };
class AmphibienFahrzeug : public Auto, public Schiff { };
|
Das nennt man dann virtuelle Vererbung....
Fehlerträchtig ist Mehrfacherbung nicht zwingend; es es nur eben einfach so, daß die Vererbung in C++ nicht so trivial wie zB in Java ist. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |