Operatoren für eine Klasse
-
Hallo!
Ich habe hier eine Klausuraufgabe aus 99, die ich versuchen will zu lösen.
Die Aufgabe lautet:Gegeben sei eine Klasse foo:
class foo { public: private: int inhalt; }
a) Definieren Sie einen Operator für die Operation foo->int mit dem Ergebnistyp foo als Memberfunktion durch Ergänzung der obigen Klassendefinition. Die Operation wurde mit dem Inhalt von foo durchgeführt. Implementieren Sie den Operator hier: ....
b) Definieren Sie einen Operator für die Operation foo *int mit dem Ergebnistyp foo als normale 2 parametrige Funktion (nicht als Memberfunktion!), ebenfalls durch Ergänzung der obigen Klassendefinition. Implementieren Sie den Operator hier: ....
zu a) Bis jetzt denke ich:
Die Operation foo->int ist gleichbedeutend mit (*foo).int, d.h. es wird int aufgerufen, welches durch foo adressiert wird.Hat jemand eine Idee, wie die Lösung dazu aussehen soll? Ich nehme an, der gesuchte Operator gehört in die Klasse, oder?
Vielleicht irgendwie so:class foo { public: foo operator .... { inhalt=n; return *this; } private: int inhalt; }
zu b)
Und Teil b vielleicht irgendwie so:class foo { public: foo operator*(foo f, int n) { foo freturn; freturn=f.inhalt*n; return freturn; } .... }
Ich verstehe das ganze echt nicht wirklich, hab mir das alles irgendwie so zusammengebastelt. Wäre echt Klasse, wenn mir jemand Ratschläge, bzw. eine Lösung geben könnte.
Achso, und nochwas: Was ist der Unterschied zwischen einer Memberfunktion und einer normalen 2 parametrigen Funktion.Vielen Dank schon mal im Voraus,
M_arcus
-
a) sieht für mich nach operator= aus
die implementierung ist richtig, sofern du ... durch =(int n)
ersetztb)
es steht doch eh schon da: keine Memberfunktion.
also mach daraus eine normale, globale funktion und die antwort ist richtig.der Unterschied einer normalen funktion zu einer Memberfunktion ist der this Zeiger
-> http://schornboeck.net/ckurs/this.htm
eine normale Funktion kann keinen this Zeiger haben - woher denn auch. es gibt ja kein objekt.
-
zu b noch:
mit diesen definitionen muss aber die funktion als friend deklariert werdenx operator * ... class x { friend x operator * ... };
-
Hallo!
Danke schon mal für die guten Antworten!Also jetzt nochmal zu Teil b:
Keine Memberfunktion das heißt: ich muß den operator außerhalb der Klasse schreiben ( so wie von davie angedeutet), oder?
Also, könnte ich die Lösung für a) und b) zusammen dann so schreiben?
foo operator*(foo f, int n) { foo freturn; freturn=f.inhalt*n; return freturn; } class foo { public: foo operator = (int n) { inhalt=n; return *this; } friend foo operator*(foo f, int n); private: int inhalt; }
Gruß
M_arcus
-
Genau.
Hm, mir leuchtet nur nicht ein, was das jetzt mit -> soll!?
foo* fooo = new foo; fooo->??? delete fooo;