Liste & operator =(const Liste &);
-
Hello liebe C++ler,
ich habe mal eine Frage.
Un zwar verstehe ich in einer Klasse die folgende Zeile nicht:
Liste & operator =(const Liste &);Hier die Klasse:
class Liste { private: ListenStruktur *Kopf , *Schwanz; ListenStruktur *Position(int); public: Liste(); Liste(Liste &); ~Liste(); Liste & operator =(const Liste &); bool IstLeer() ; void EinfuegenAmAnfang(int); void EinfuegenAmEnde(int); bool EinfuegenNach(int, int); bool ElementExistiert(int); };Und hier die Methode an sich:
Liste & Liste::operator =(const Liste &L) { ListenStruktur *temp1; if(this!=&L) { this->~Liste(); for(temp1=L.Kopf->Nach;temp1->Nach;) { EinfuegenAmEnde(temp1->element); temp1=temp1->Nach; }; }; return *this; };wäre nett wenn mit diese einer im detail erklären kann.
-
Liste & operator =(const Liste &);Das ist eine Funktion namens "operator =". Die nimmt einen Parameter vom Typ "const Liste &" (also eine Referenz auf eine nicht änderbare Liste) und gibt einen Wert vom Typ "Liste &" zurück (also eine Referenz auf eine Liste). Der Parameter hat an dieser Stelle noch keinen Namen, da es nur die Funktiondeklaration ist. Außerdem ist aus dem Zusammenhang klar, dass diese Funktion ein Teil der Klasse "Liste" ist.
Der seltsame Name "operator =" ist etwas besonderes: Operatorüberladung (Googlen oder den Artikel hier im Forum lesen). Damit kann man später im Code anstatt
myListe.operator=(otherListe);einfachmyListe = otherListe;schreiben. Warum gibt so eine Funktion eine Referenz (normalerweise auf das aufrufende Objekt) zurück? Damit man Sachen wieliste1 = liste2 =liste3;schreiben kann, wie man es von den eingebauten Datentypen gewohnt ist.
-
Imho führt das
this->~Liste();
in der Funktion zu undefiniertem Verhalten.
-
manni66 schrieb:
Imho führt das
this->~Liste();
in der Funktion zu undefiniertem Verhalten.wie meinst du das?
-
Eles schrieb:
manni66 schrieb:
Imho führt das
this->~Liste();
in der Funktion zu undefiniertem Verhalten.wie meinst du das?
Danach ist der Speicherbereich tot. TOT. Insbesondere ist da keine Liste mehr.
this->~Liste(); new(this) Liste;wäre das Mindeste, damit da wieder eine lebende Liste ist.
Aber da ich den Trick jahrelang nicht gesehen habe, nehme ich an, daß es auch ohne den Trick geht.
-
So etwas wie eine Liste schreit gerade zu nach dem "copy-and-swap"-Trick à la
list& operator=(list temp_copy) { this->swap(temp_copy); return *this; }