Anfängerfrage "cin"



  • Hallo,

    ich habe gerade ein kleines Problem:

    Ich möchte über cin direkt einen Wert einlesen lassen.

    class bruch {
    	int zaehler, nenner, ggt();
    public:	...
    		int gib_z(int z){
    			zaehler=z;
    			return zaehler;
    		};
    		int gib_n(int n){
    			nenner=n;
    			return nenner;
    		};
    ...
    
    cout<<"Bitte geben Sie einen Wert für den Zaehler an:";
    				cin>>v;
    				x.gib_z(v);
    				cout<<"Bitte geben Sie einen Wert für den Nenner an:";
    				cin>>w;
    				x.gib_n(w);
    

    Wie ihr sehen könnt, übergebe ich den Wert an x.gib_z/n über eine Variable. Wie kann ich diesen Zwischenschritt entfallen lassen?



  • Du könntest zwar zaehler zu einem public-Member machen und direkt mit cin befüllen, das solltest du aber nicht. So ist es schon ganz gut, kein direkter Zugriff auf Klassen-Member. Dafür benutzt man eben Setter und Getter. Sollte sich mal in der Klasse was ändern, brauchst du nur den Setter (gib_z) zu ändern und nicht alle Stellen im Code, an denen du direkt auf zaehler zugreifst.

    Btw, den Rückgabewert der Methoden halte ich in der Form für überflüssig. Stattdessen könntest du z.B. einen Fehlercode zurückgeben (z.B, wenn als Nenner 0 übergeben wird) und diesen auswerten.



  • Was du noch machen könntest, wäre einfach den operator>> für deine Klasse zu überladen.

    wie _matze schon indirekt andeutete, deine Getter müssen doch nicht erst dein werte befüllen, sondern die sollen die doch nur zurückgeben,also in etwa so:

    int gib_z()const
    {
       return zaehler;
    }
    


  • 😃

    Und du solltest deine Bezeichner mal überdenken. Während ich "gib_z" durch den Kontext als Setter interpretiert habe, hat Firefighter die Methode wohl eher als Getter verstanden (impliziert der Name ja auch) oder zumindest in seinem Beispiel so benutzt. Also nenn's besser "set_z" und "get_z" oder so...



  • 😃 🤡 👍


Log in to reply