Vererbung von Operatoren (2/2)

  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
  }

Ausnahme bei der Vererbung von Operatoren

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.