Member vs. Parameter



  • Übergibt man Daten in einer Klasse besser per Paramter oder verwendet man ne Membervariable dafür?

    class foo() {
      public do(string t) {
        vector v;
        ...
        fill(v);
      }
    
      private fill(vector v){
        v=...
      };
    }
    
    //vs
    
    class foo() {
      vector m_v;
      public do(string t) {
        ...
        fill();
      }
    
      private fill(){
        m_v=...
      };
    }
    


  • Du vergleichst Birnen mit Äpfeln.

    Entweder ist es ein Member, und hat somit über den Aufruf der Methode bestand, oder es ist nur ein lokal benötigter Wert, der danach wieder zerstört wird.



  • Zur Unterstuetzung des Open-Closed-Principles im Falle von Ableitungen definitiv Membervariablen. Denn der Ctor ist fuer jede Klasse individuell, nicht aber die oeffentliche Schnittstelle.



  • Membervariablen sind dazu da, den Zustand des Objektes zu beschreiben. Wenn also die Variable den Zustand des Objektes beschreibt, dann nehme eine Membervariable. Wenn es ein Parameter einer auszuführenden Aktion ist, dann ist das ein Parameter.

    In Deinem konkreten Fall kann ich nicht sagen, was die Klasse "foo" bedeutet und ob der Vektor zu der Eigenschaft gehört oder nicht.

    Was ich aber sagen kann ist, daß Du in Deiner fill-Methode deinen Parameter v veränderst, der aber eine lokale Variable ist. Nach dem Methodenaufruf wird der Parameter wieder verworfen. Erwarte also nicht, daß sich der übergebene Vektor ändert.

    Was Du wahrscheinlich meinst ist "fill(vector& v)". Da übergibst Du einen Verweis auf einen Vektor, über den Du den ursprünglichen Vektor auch verändern kannst.



  • Wenn ihr jetzt nen Parameter habt, der durch 10 Methoden übergeben wird, würdet ihr keine Member daraus machen, wenn es nichts mit dem Zustand des Objektes zu tun hat?

    tntnet schrieb:

    Was ich aber sagen kann ist, daß Du in Deiner fill-Methode deinen Parameter v veränderst, der aber eine lokale Variable ist. Nach dem Methodenaufruf wird der Parameter wieder verworfen. Erwarte also nicht, daß sich der übergebene Vektor ändert.

    Was Du wahrscheinlich meinst ist "fill(vector& v)". Da übergibst Du einen Verweis auf einen Vektor, über den Du den ursprünglichen Vektor auch verändern kannst.

    Ich hab keine Cpp Tags genommen, weils nur Pseudocode ist.



  • Schwarzer Homer schrieb:

    Wenn ihr jetzt nen Parameter habt, der durch 10 Methoden übergeben wird, würdet ihr keine Member daraus machen, wenn es nichts mit dem Zustand des Objektes zu tun hat?

    Kurze Antwort: Ja.

    Wenn es logisch ein Parameter ist, dann bleibt er auch durch 10 Methodenaufrufe ein Parameter. Etwas als Member zu deklarieren, was kein Member ist, ist prinzipiell unsauber und sollte nur in begründeten Ausnahmefällen verwendet werden.

    Wenn etwas durch 10 Methodenaufrufe durch übergeben wird, solltest Du Dich eher fragen, ob da nicht ein Designfehler vorliegt.


Anmelden zum Antworten