Werte setzen und lesen aus Klassen



  • Welche Form findet ihr besser? Und warum?

    Form1:

    class Foo
    {
      void setValue( int i );
      int  getValue() const;
    };
    
    //Anwendung:
    Foo f;
    f.setValue( 1 );
    cout << g.getValue();
    

    Form2:

    class Foo
    {
      void value( int i );
      int value() const;
    };
    
    //Anwendung:
    Foo f;
    f.value( 1 );
    cout << f.value();
    

    Ich verwende meist Variante2, wenn man den Bezeichner ordentlich wählt, stört das fehlende set/get nicht. Zugegeben bei dem Beispiel hier liest sich Form1 besser, aber das ist ja auch keine reale Anwendung 🤡

    zb bei den iostreams wird form2 verwendet



  • Für die setter und getter Methoden würde ich dir immer ersteres Empfehlen.
    Erleichtert die Lesbarkeit und die Fehlersuche ungemein.



  • Das ist Geschmackssache. Ich persönlich neige eher zu Variante 2, da es im allgemeinen eh' klar ist gemeint ist. Ansonsten versuche ich, die Klasse-Struktur so zu gestalten, dass gar keine Getter/Setter-Methoden auftreten. Maximal eine von beiden. Sind beide Methoden für einen Member einer Klasse vorhanden, so würde ich das schon pauschal als Design-Fehler bezeichnen.

    Beispiel: wenn Du das '[get]Value() const' nur zur Ausgabe von Informationen benötigst, so ist ein Streaming-Operator für 'Foo' die angesagte Alternative.
    Vorteil: bei Erweiterungen oder Änderungen von 'Foo', muss der Anwender keinen Code ändern - und das ist ja genau der Sinn einer Klasse - das Verbergen von Internas vor dem Anwender.

    Gruß
    Werner


Anmelden zum Antworten