Operator Überladung
-
Hallo,
muß ne Aufgabe lösen. Hier ist eine Liste gegeben, die maximal 25 Elemente aufnehmen kann:class Liste { public: Liste(); // als leere Liste initialisieren void read(); // Liste einlesen void write() const; // Liste ausgeben private: void insert(int x); int a; int l[25]; };Soweit alles klar

Nun sollen die Methoden void read() und void write() const durch Operatorenüberladung ersetzt werden, um am Ende die Liste mit Hilfe eben des überladenen Operators zu füllen, wie folgendes Beispiel zeigt:int main() { Liste l; cin >> l; cout << l << endl; return 0; }So, jetzt hab ich den Operator '>>' in der Liste folgendermaßen überladen:
class Liste { public: ... istream& operator>>(Liste& rList); ... };Hmm, nur ergibt das für mich irgendwie kein Sinn. Wie soll denn die Liste jetzt gefüllt werden, und mit welchen Werten?!

Stehe total aufm Schlauch. Soll ich jetzt in einer Schleife die 25 Werte per cin abfragen oder was? Wenn ja, dann kann ich mir die Überladung doch gleich sparen oder so lösen:class Liste { public: ... Liste& operator>>(int newWert); ... };Wär cool wenn jmd. mal nen Ansatz aufzeigen könnte
-
Ich würde die Operatoren nicht als Elementfunktionen deklarieren, da sonst IMMER ein Objekt deiner Liste Klasse links vom Operator stehen müsste.
Dann müsstest du z.B. schreiben:Liste liste; liste >> cin; liste << cout;Das sollte soweit ich weiß zwar funktionieren, aber das entspricht nicht ganz den C++ konventionen. Also sollten die operatoren raus aus der Klasse!
Du könntest schreiben:istream& operator>>(istream& input, Liste& liste) { //Hier steht dann, wie genau du die Liste mit Daten füllen willst. input >> data; return input; // nicht vergessen }In Main musst du dann nur noch das schreiben:
int main() { Liste liste; cin >> liste; }In dem operator selbst musst du nur schreiben, was du einlesen willst. Also in deinem Fall glaube ich eine anzahl von cin befehlen, mit denen du deine Liste füllst.
Der operator hilft dir nur deien Code in der main funktion zu verkürzen.PS: Erster Beitrag
-
Danke Dir,ist ja schon bald peinlich. Dein Code eigentlich glasklar

Irgendwie bin ich heute nicht mehr in der Lage klar zu denken *kopfschüttel*
-
void read(); // Liste einlesen void write() const; // Liste ausgebendas const ist "verkehrt rum"! es muß so lauten:
void read() const; // Liste einlesen void write(); // Liste ausgebenschließlich läßt read() und nicht write() das listen-objekt unverändert.
-
void read(); // Liste einlesen void write() const; // Liste ausgebenähem...sollte eigentlich klar sein nach den Kommentaren, das write() die Liste nur ausgibt(und somit nicht verändert) wobei der Funktionsname "unglücklich" gewählt wurde
-
ach so
