next up previous
Nächste Seite: Kommen wir an das Aufwärts: Genügt wirklich Konstruktor und Vorherige Seite: Kopier-Konstruktor

Zuweisungsoperator

Ein ähnliches Problem tritt bei der Zuweisung von Objekten auf:


CVector v,w;

v=w;

Was erwarten wir? dass richtig kopiert wird. Der Compiler kopiert aber wieder nur die Membervariablen (also vector und dimension) und der allokierte Speicherplatz von v, der im Konstruktor allokiert wurde, geht ``verloren'', und beide Vektoren haben plötzlich Zeiger auf das gleiche Feld!

Wir stellen dem Compiler also einen Zuweisungsoperator als Memberfunktion zur Verfügung, damit er bei der Zuweisung korrekt arbeiten kann.

Deklaration:


class CVector {
  ...
  CVector& operator=(        // assignment-operator
    const CVector& v
  );
  ...
};

Implementierung (vorläufig!):


CVector& CVector::operator=(
  const CVector& v
) {
#ifdef _DEBUG
  if(dimension!=v.dimension) {
    cout << "fatal error: dimensions of vectors differ\n";
    exit(1);
  }
#endif
  dimension = v.dimension;
  vector    = new double[dimension];
  for(int i=0; i<dimension; i++)
    vector[i] = v.vector[i];
  return ????;
}

Problem: was geben wir zurück? Wir müssten eigentlich gerade das Objekt zurückgeben, mit dem wir arbeiten ...




1999-12-13