"cin" und Zugriffsfunktionen
-
Hallo Leute!
Hab folgendes Problem: Gibt es eine Möglichkeit eine bei "cin" eingegebene Zahl direkt über eine Zugriffsfunktion einer Klasse in die Elementvariable zu schreiben. Oder muss ich zuerst eine neue Variable Definieren, dann der neuen Variable mit cin den Wert zuweisen und zum Schluss mit der Zugriffsfunktion den Wert über die neuerstellte Variable abfragen?
Hoffe ihr wisst was ich mein
Danke im Voraus
-
Das geht, wenn die Zugriffsfunktion eine nicht-konstante Referenz auf die Membervariable zurückgibt.
-
hey danke für die Antwort. Hast du auch ein kurzes anschauliches Beispiel dafür??
Wär super
Danke
-
shark95 schrieb:
hey danke für die Antwort. Hast du auch ein kurzes anschauliches Beispiel dafür??
z.B.
class int_wrapper { int value; public: int_wrapper(int v = 0) : value(v) {} int& get_value() { return value; } ... }; int main() { int_wrapper obj; cin >> obj.get_value(); }Gruß Caipi
-
Überladene Ausgabe-Operatoren wären ebenfalls eine Möglichkeit.
-
Zweiundvierzig schrieb:
Überladene Ausgabe-Operatoren wären ebenfalls eine Möglichkeit.
danke, doch das ist noch etwas zu kompliziert für mich. Aber mit der obigen Lösung komm ich gut zurecht.
-
Lass das lieber - da hast du den selben Effekt, wenn du value gleich public deklarierst. Ich würde lieber eine Memberfunktion schreiben, die sich um die Eingabe kümmert:
class test { int value; public: void readval(istream& in){in>>value;} } test t; t.readval(cin);
-
CStoll (off) schrieb:
Lass das lieber - da hast du den selben Effekt, wenn du value gleich public deklarierst. Ich würde lieber eine Memberfunktion schreiben, die sich um die Eingabe kümmert:
class test { int value; public: void readval(istream& in){in>>value;} } test t; t.readval(cin);dachte ich mir auch. Dann nehm ich doch besser deine Lösung. Thx
-
so, kaum hab ich ein Problem gelöst steht das nächste an (was dann aber glaub ich vorerst das letzte sein wird): Weiß jemand wie ich jetzt im Beispiel von CStoll die Memberfunktion über die Eingabe verwenden kann, wenn diese Klasse eine Elementvariable einer anderen Klasse ist?
Das kann ich zwar machen indem ich jetzt die Get() Funktionen der 2. Klasse (die also die Elementvariablen mit return zurückgeben) als nicht konstante Referenz Referenz mache, aber davon wurde mir ja abgeraten.
Danke
-
Du schreibst dir in deiner zweiten Klasse eine Eingabefunktion (entweder so ein readval() wie oben oder einen operator>>()) und rufst dann diese Funktion auf:
class K2 { public: void read(istream& in); }; class Klasse { public: void readval(istream& in) {value.read(in);} private: K2 value; };