Lektion 62:

Der Zuweisungs-Operator

Das Programm, das in der letzten Lektion einen Fehler verursacht hat, muß nur leicht modifiziert werden, um auch die verbesserte Version der Klasse Vector zum Abstürzen zu bringen.

void main()
{
   Vector v1(10);
   v1[1]=4711;
   v1[2]=0;
   Vector v2(10);
   v2=v1;
   v2[2]=4712;
   cout<<v1[1]<<endl;
   cout<<v1[2]<<endl;
};

Der Fehler liegt jetzt in der Zeile

   v2=v1;

  Für die Zuweisung erzeugt der Compiler ebenfalls automatisch eine Methode. Auch diese Methode kopiert nur die Attribute, ohne zu erkennen, daß noch mehr gemacht werden müßte. Also muß die Methode für den Zuweisungsoperator ebenfalls explizit angegeben werden. Zuerst wird der alte Speicher freigegeben und dann wird neuer Speicher in der Größe des anderen Vectors angelegt und die Daten werden kopiert. Bis auf die erste Zeile ist der Code also identisch mit dem des Copy-Konstruktors.

   void operator=(const Vector &derAndereVector)
   {
      delete m_data;
      m_size=derAndereVector.m_size;
      m_data=new double[m_size];
      for(int i=0;i<m_size;++i)
         m_data[i]=derAndereVector.m_data[i];
   };

Heureka! Das Programm funktioniert. Den nächsten Fehler dürfen Sie in der folgenden Lektion genießen.



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00