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