Moin Leutz
Ich werd aus meinem Vorlesungsscript und dem Begleitbuch nicht schlau wie der Syntax zur Operatorüberladung von "=" aussieht. Wenn ich zwei Klassen habe und mit dem "=" Eine Wertzuweisung von einer Klasse in die andere mache, dabei aber ein Umrechnung stattfinden soll, wie sieht der entsprechende Syntax exemplarisch aus?
z.B.
Syntax soll wie folgend im Prog dann nach Überladung aussehen:
...
Klasse1 = Klasse2;
...
Vielleicht kann mir hier ja jemand weiter helfen *hoff*
Greetz und im vorraus Danke!
Cursedone
class xy{
public:
xy& operator=(const xy& a)
{
//zuweisung an die member variablen
//und dein restlicher code hier
return *this;
//referens auf sich selbst zurückgeben
}
private:
//irgendwas ...
};
//------------------------------------------------
// beim overloading spielt auch implizite conversion eine rolle
also wenn du z.B. für xy einen construcktor zur verfügung stellst , der "irgendwas" als parameter hat , dann kannst du auch schreiben:
...
irendwas i;
xy XY;
XY=i;
...
dann macht der compiler daraus:
...
irgendwas i;
xy XY;
XY.operator((xy(i));
...
schafft also ein Object und übergibt es an die memberfunktion operator=(const xy& a){...}
wenn du also den operator geschickt für mehere datentypen zulassen willst , musst einen konstrucktor bereitstellen , mit dem gewünschten datentyp als parameter, (sind ja auch mehere constucktoren möglich)
willst du das hingegen abschalten das der kostrucktor dann implizit zur konversion gebraucht wird musst du ein "explicit" davor stellen
weiterhin als Tipp, (ich weiss jetzt nicht genau wo das problem ist ), aber es ist manchmal ratsam zu wissen das man keine referncen auf temporäre objecte zurückgeben kann , weder ist es sinnvoll zeiger auf tempöräre objecte oder variablen zurückzugeben , da diese nach verlassen , der funktion nicht mehr existieren ,
beim operator=(...) brauchst du im prinzip keinen rückgabe wert , aber unbedingt EINEN parameter .
und overloading wird nur akzeptiert falls die effective parameterliste dann eindeutig auf die funktion schliesen lässt , der rückgabetyp wird garnicht beachtet , beim validieren bzw compilieren
also
int max(double a, double b){return 0;}
float max(double a, double b){return 0.0;};
dürfte NICHT klappen
... ich hoffe mal das war ne kleine hilfe