Operatorüberladung, warum?
-
Hallo leute..
ich bin grad am c++ lernen, und bin bei dem (wohl etwas kompliziertem) thema der operatorüberladung!
Hab mir da mal den ZUweisungsoperator angeschaut!
Nun meine frage: wofür brauch ich das?
Kann ich da mit dem operator ganz neue sachen machen? (zB Werte tauschen?)
class test { int x,y; public: test(int x,int y):x(x),y(y){}; test& operator= (const test& t) { x=t.y; y=t.x; } };
oder wofür brauch ich das?
-
Anngenommen du schreibst dir eine Klasse für Brüche. Wenn du Operatoren nicht überladen könntest, würdest du nur umständlich damit arbeiten können:
Bruch a, b; a.zuweisen(9,5); b.zuweisen(4,5); a.addieren(b);
Durch Operatorüberladung kannst du die Klasse so gestalten, dass man sie benutzen kann wie einen ganz normalen int:
Bruch a, b; a = 9/5; b = 4/5; a += b;
-
Hi,
Prinzipiell ist die Operatorenüberladung dafür gedacht, die Eigenschaften/Fähigkeiten von Operatoren für bestimmte Klassen zu erweitern/anzupassen.Der =-Operator ist standardmäßig vorhanden. Er kopiert die Datenelemente des rechten Operanden in die Datenelemente des linken Operanden. In deinem Beispiel also:
... x = t.x; y = t.y; ...
Man überlädt den Zuweisungs-Operator meistens wenn eine Klasse dynamische Datenelemente besitzt. (In diesem Fall reicht der Standard-Zuweisungsoperator nicht mehr aus, da er nur 'flach' kopiert).
//Edit: Zu spät und wie mir gerade auffällt wahrscheinlich auch am Thema vorbei...
Caipi
-
Hm...also das er völlig neue saachen macht is also nich?
Weil bei mir kopiert er y nich in x und umgedreht, er kopiert als würde einfach x=t.x stehen!HAb auch mal das probiert:
test& operator= (int var) { x=var; y=0; return *this; }
und so aufgerufen:
test* y; y = 30;
da kommt fehler, das int nicht in test gewandelt werden kann!
Wie muss es richtig aussehen?
-
Der Aufruf muss so lauten:
test y; y = 30;
Warum wolltest du das überhaupt anders machen?
Caipi
-
hm....das weis ich selber nich genau
Hmm..und bei den anderen operatoren funktioniert das dann wohl ähnlich?
Also das ich das += benutzen kann etc?!
-
Op_overloading schrieb:
bei den anderen operatoren funktioniert das dann wohl ähnlich?
jo
du musst nur aufpassen welche operatoren als member der klasse implementiert werden und welche als funktion ausserhalb der klasse.
siehe http://tutorial.schornboeck.net/operatoren_ueberladung.htm und folgende
-
hm...is ja auch nen ganz schön kompliziertes thema oder?