class overloading operator+



  • Hallo, ich habe ein problem mit operatoren.

    v2d v2d::operator+( v2d aso){
    aso.leng = this->leng + aso.leng;
    return aso;
    }
    

    Dieser code funktioniert problemlos wenn ich zwei Objekte addieren möchte.

    Leider habe ich jetzt als Vorgabe folgenden zu benutzen

    v2d & v2d::operator+(const v2d &v){
    // put something here
    }
    

    Da ich jetzt mit den Addressen & arbeite weiß ich nicht mehr wie ich vorgehen muss.

    Grüße



  • Ist vielleicht operator+= gemeint? Für operator+ ist die Rückgabe einer Referenz blöd (wie du schon bemerkt hast).



  • Leider nicht, da wir einen automatischen CodeJudge haben ist es mir auch nicht möglich die Header und Main Dateien zu ändern.

    Ergo muss ich es mit Referenzen machen.



  • v2d & v2d::operator+(const v2d &v){
    	static std::deque<v2d> results;
    	results.emplace_back(leng + v.leng);
    	return results.back();
    }
    

    😉

    LG

    (PS: Verwende das nicht! Die Aufgabenstellung ist einfach broken.)



  • MarioGTI schrieb:

    Ergo muss ich es mit Referenzen machen.

    Tja, entweder sollst du feststellen, dass das nicht geht, oder YAIT (yet another incompetent teacher).



  • Die Antwort:

    Hi,
    you can modify, and upload, only vector2d.cpp

    Da muss es doch irgendeine einfache Lösung geben :).



  • MarioGTI schrieb:

    Die Antwort:

    Hi,
    you can modify, and upload, only vector2d.cpp

    Da muss es doch irgendeine einfache Lösung geben :).

    Warum?



  • MarioGTI schrieb:

    Leider nicht, da wir einen automatischen CodeJudge haben ist es mir auch nicht möglich die Header und Main Dateien zu ändern.

    Ergo muss ich es mit Referenzen machen.

    Aber du könntest mal deinen Lehrer fragen. Vielleicht einfach ein Versehen, dann wäre er u.U. sogar froh wenn ihn jmd. darauf hinweist.



  • Weil ich einfach folgenden Code benutzen kann:

    v2d & v2d::operator+(const v2d &v){
    	x=v.x+this->x;
    	y=v.y+this->y;
    	return *this;
    }
    

    Die Vektorlänge der Variablen x und y errechne ich dann mit einer anderen Funktion. Aber ändert vom Prinzip ja nichts

    Ist doch ganz einfach mit References.

    Trotzdem Danke


  • Mod

    MarioGTI schrieb:

    Weil ich einfach folgenden Code benutzen kann:

    Der aber falsch ist. Mach mal ein Testprogramm und guck dir die Werte aller Variablen an, nachdem dieser Code ausgeführt wurde.



  • Habe ja CodeJudge, das generiert Testwerte und die neuen Werte stimmen alle.

    Und das für alle operatoren(= + 😉

    Aber ich gucken gleich mal nach ALLEN Werten. Habe jetzt nur die Ergebnisse kontrolliert.



  • MarioGTI schrieb:

    Habe ja CodeJudge, das generiert Testwerte und die neuen Werte stimmen alle

    Wenn die Tests genau so gut wie die Aufgabenstellung sind, besagt das nicht viel ...



  • Das ist inhaltlich ein operator+=.

    Deinen CodeJudge kannst du in die Tonne treten, wenn er solchen Stuss durchlässt.



  • Habe gerade alle Werte ausgegeben.
    Das Ergebnisobjekt ist richtig aber in den zu addierenden objekten ändern sich auch Werte.

    Bringt tatsächlich keinen pädagogischen Mehrwert mit sich. Dankeschön


  • Mod

    MarioGTI schrieb:

    Bringt tatsächlich keinen pädagogischen Mehrwert mit sich.

    Kommt drauf an, ob du daraus etwas nützliches gelernt hast, oder nicht. Es gibt jedenfalls genug, was man hier hätte lernen können.



  • Warum reden alle nur in Rätseln?

    Der Gag ist doch bei

    vec2 a(...), b(...);
    vec2 c = a + b;
    

    sollte sich a nicht verändern, richtig?

    const vec2 a(...);
    vec2 b = a + a;
    

    sollte wohl auch kompilieren.



  • @Furble
    Naja, so rätselhaft kann es nicht gewesen sein, MarioGTI hat's schliesslich verstanden 😉

    @MarioGTI
    Nochmal: Sprich doch deinen Lehrer drauf an.



  • hustbaer schrieb:

    @Furble
    Naja, so rätselhaft kann es nicht gewesen sein, MarioGTI hat's schliesslich verstanden 😉

    Stimmt auffällig...
    Hab MarioGTIs letztes Posting nicht richtig gelesen. 😕


Log in to reply