void main() { A a; B b; C c; int x = (b == 7); // ok: A::operator==(7) int y = (b == x); // ok: A::operator== wird vererbt int z = (c == y); // Problem: Hier wird (c.c==y) statt (c.n==y) untersucht }
Der einzige Operator der nicht vererbt wird ist der Zuweisungsoperator
operator=
. Dieser hat, sofern er nicht definiert wird, eine
Standarddefinition: Die elementweise Kopie. Wird im vorangegangenen Beispiel
in der Klasse A
der Zuweisungsoperator definiert und in der Klasse
B
nicht, so wird bei einem Aufruf von
B b, c; b = c;das Objekt
c
elementweise nach b
kopiert.
Wird darüberhinaus in Klasse A
der Zuweisungsoperator mit einem
Objekt einer anderen Klasse, wie z.B. int
defniert, so wird eine
Zuweisung der Form
A a; B b; a = 6; // Ok: operator=(int m) definiert b = 7; // Fehler! operator=(int m) nicht vererbt.fehlschlagen, da der
operator=
nicht vererbt wird. In der Klasse
B
existiert nur die Standardausführung des Operators, der
elementweise kopiert. Dazu muß erst ein Objekt der Klasse vorhanden sein.
Der Compiler versucht den Integer in ein Objekt der Klasse B
umzuwandeln. Dies scheitert aber daran, daß kein Konstruktor
B(int)
mit einem Integerwert vorhanden ist.