operatoren überladen



  • Hallo,

    ich habe ein struct, der im wesentlichen eine matrix ist, also einen int[][] enthält. Damit ich nun auf einen Eintrag einfach zugreifen kann, habe ich den operator () überschrieben:

    int operator() (int x, int y){ return matrix[x][y]; }
    

    Nun würde ich gerne auch die Zuordnung eines einzelnen Elements der matrix so vereinfachen. Doch blicke ich irgendwie nicht ganz durch, wie das geschehen soll...
    Ich hoffe es kann mir jemand helfen.

    Gruss



  • Gib ne Referenz zurück.



  • .filmor schrieb:

    Gib ne Referenz zurück.

    Und was habe ich dann davon?



  • ich müsse ja irgendwie den operator= überschreiben, aber ich kann ja nirgends den Punkt x,y der matrix den ich ändern will angeben...



  • ich dachte eigentlich, das Problem könnte schnell gelöst werden, aber vielleicht ist es ja auch nicht so ganz klar. Darum hier etwas mehr Code:

    struct matrix{
      int[][] m;
      operator ()(int x, int y){ return m[x][y]; }
    }
    

    Das lässt sich nun z.B. so verwenden, und funktioniert wunderbar (initialisierung usw. hab ich im Code mal weggelassen)

    matrix q;
    int a = q(2,2);
    

    Nun würde ich jedoch auch gerne einzelne Matrixelemente ebenso elegant zuweisen können, also

    matrix q;
    q(1,1) = 5;
    

    Leider habe ich wirklich keine Ahnung wie das gehen soll, und auch noch nichts äquivalentes gefunden.
    Ich hoffe das Problem ist nun glasklar und jemand kann mir helfen

    🙂



  • .filmor schrieb:

    Gib ne Referenz zurück.

    Offensichtlich hast du das nie probiert.



  • wow, jetzt hab ich es kapiert. Einfach anstelle von einem int, ein int& zurückgeben, und der Wert lässt sich dann ändern...



  • Hmm ja nee jetzt wirklich? Vllt solltest du nochmal die Grundlagen dir angucken.

    int& operator()(const int x, const int y){ return m[x][y]; }
    

    ... wobei du das ganze noch sowas wie wenn > array_größe dann throw execption einbauen solltest.


Anmelden zum Antworten