Setter Methoden



  • Hi,

    ist es in C++ eigentlich sinnvoll für jeden Member einen Setter zu schreiben?

    Beispiel:
    Ich habe eine Klasse Ebene, die Richtungs- und Stützvektoren speichert. Sollte man nun für diese Klasse eine Methode schreiben, die diese Vektoren setzt? Weil ich denke, das man diese Methode sowieso nie benutzen würde, weil man ja auch einfach e = Ebene(...) schreiben könnte, um sie zu verändern.



  • pyhax schrieb:

    ist es in C++ eigentlich sinnvoll für jeden Member einen Setter zu schreiben?

    Das ist in keiner Sprache sinnvoll...

    pyhax schrieb:

    Ich habe eine Klasse Ebene, die Richtungs- und Stützvektoren speichert. Sollte man nun für diese Klasse eine Methode schreiben, die diese Vektoren setzt? Weil ich denke, das man diese Methode sowieso nie benutzen würde, weil man ja auch einfach e = Ebene(...) schreiben könnte, um sie zu verändern.

    Wenn die Klasse nix andres tut als zwei Vektoren zu speichern würd ich mir überlegen, ob es nicht einfach ein struct mut public Membern sein sollte...



  • Naja man soll ja nicht einfach so auf die Vektoren zugreifen. Zum Beispiel sollten Richtungsvektoren nie die Länge null haben, und auch nicht kollinear sein 😃 (Da habe ich dann asserts)



  • Was genau tut man denn mit der Ebene wenn man nicht drauf zugreifen können soll?



  • pyhax schrieb:

    ist es in C++ eigentlich sinnvoll für jeden Member einen Setter zu schreiben?

    Ein Setter ist dann und nur dann sinnvoll, wenn du jetzt oder später den Zugriff einschränken möchtest. (Bestimmte Werte ausschließen, etc.)

    Und ja, du solltest die Vektoren deiner Ebene auch nachträglich beschreibbar machen.



  • Nur die Daten auslesen. Setzen kann man sie auch über den Konstruktor, also so:

    Ebene e(Vektor(), Vektor(1,2,3), Vektor(2,3,4) );
    //Verändern der Vektoren
    e = Ebene(Vektor(1,2,3), Vektor(4,3,2), Vektor(5,3,2) );
    

    Dank der Move Konstruktoren von C++11 sollte das nicht wesentlich langsamer sein.



  • pyhax schrieb:

    Dank der Move Konstruktoren von C++11 sollte das nicht wesentlich langsamer sein.

    Doch, weil du alle Vektoren setzt. Da greifen vielleicht sogar die Compileroptimierungen nicht mehr. Aber es ist eh hässlich, wenn man nur einen Vektor ändern möchte:

    Ebene e(Vektor(..), Vektor(..), Vektor(..));
    e = Ebene(e.getA(), e.getB(), Vektor(..);
    // vs
    e.setC(Vektor(..));
    

Anmelden zum Antworten