Lektion 63:thisEs ist leider noch ein kleiner Fehler im Zuweisungsoperator versteckt!
Hier wird im Zuweisungsoperator
zuerst der Speicherbereich von v1.m_data gelöscht und dann neu angelegt. Dann wird der Speicher von v1.m_data auf sich selbst kopiert. Die Schleife hat also keine Wirkung. Die Daten, die vorher im Vector standen sind verloren. Überprüfen Sie im Zuweisungsoperator immer auf Zuweisungen an sich selbst! Um diese Überprüfung möglich zu machen, gibt es den Zeiger this. Dieser Zeiger ist in jeder Methode vorhanden und zeigt auf das aktuelle Objekt. Sie könnten also z.B. statt
ebenso schreiben:
Wenn zwei Zeiger auf genau den selben Speicherbereich zeigen, dann zeigen sie auf dasselbe Objekt. Mit dem this-Zeiger ist es also möglich, zu überprüfen, ob die übergebene Referenz auf das aktuelle Objekt zeigt. Man braucht ihn nur mit der Adresse des anderen Vectors zu vergleichen. Nur wenn diese beiden Adressen unterschiedlich sind, muß der Zuweisungsoperator eine richtige Kopie anlegen, anderenfalls hat er nichts zu tun.
Übung:Die Implementierung dieses Zuweisungsoperators ist immer noch fehlerhaft. Der Zuweisungsoperator soll den neuen Wert zurückliefern. Das erlaubt, z.B. folgenden Code zu schreiben:
Der Wert von
ist das neue b. Und der Wert von b kann wiederum a zugewiesen werden. Das funktioniert mit der Klasse Vector noch nicht. Der Rückgabetyp des Zuweisungsoperators soll eine Referenz auf einen Vector sein.
Schreiben Sie diesen Zuweisungsoperator! Testen Sie Ihre Implementierung mit folgender main-Funktion:
Hiermit ist die Klasse Vector vorläufig fertiggestellt. Machen Sie aus der Klasse Vector eine Template-Klasse und speichern Sie diese in der Datei "Vector.h". Einsendungen:Datei "Vector.h"ÜbungIn einem Gefängnis gibt es genau 100 Zellen. Die Zellen sind beschriftet mit den Zahlen 1 bis 100. Es gibt auch 100 Gefängniswärter. Die Türschlösser sind so beschaffen, daß die Wärter nicht erkennen, ob sie die Türen aufschließen oder zuschließen. Zu Beginn des Tages sind alle Türen verschlossen. Zuerst kommt Wächter 1 und schließt beginnend bei Tür 1 jede Tür. Dann kommt Wächter 2, der nicht ganz so arbeitsam ist, und schließt beginnend bei Tür 2 jede zweite Tür. Dann kommt Wächter 3, der nur jede dritte Tür schließt, und so weiter, bis schließlich Wächter 100 nur die 100. Tür schließt. Welche Türen sind nach Durchgang aller 100 Wächter unverschlossen? Schreiben Sie ein Programm, das einen Vector<bool> verwendet und damit diese Aufgabe für Sie löst! Einsendungen:LösungsvorschlagFalls 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 |