Verständnisproblem mit unärem Negationsoperator



  • Hey!

    Ich verstehe folgendes nicht:

    // ... Klasse Euro ...
    int data;
    // ...
    public:
        Euro operator-() const
        {
            Euro temp;
            temp.data = -data;
            return temp;
        }
    // ...
    // ...
    
    Euro e1(9,50), e2(20.07), e3(-e1);
    

    Warum hat jetzt e3 den Wert -9,50 ? (Also data von e3)

    Wird der Standardkopierkonstruktor bei e3(-e1) aufgerufen? Ich denke schon, aber das Element "data" von e1 wird bei der Operatorfunktion doch gar nicht verändert?? Es wird nur ein temp. Objekt angelegt, dessen Wert von data gleich -0 ist ??

    Ich verstehe das nicht mehr..



  • Das Argument für den Copy-Ctor ist nicht e1 sondern der Rückgabewert von e1.operator-()...



  • Eben genau das wollte ich gerade schreiben.

    Euro e1(9,50), e2(20.07), e3(e1.operator-());
    

    Und was passiert hier?

    Euro temp;
    temp.data = -data;
    e3 = temp;
    

    Genau das verstehe ich nicht. Es wird doch jetzt "data" von einem temporären Objekt temp (data = 0) nach e3.data kopiert. Dann sollte e3.data den Wert -0 haben -.-

    ...



  • Du übersiehst

    temp.data = -data;
    

    und data ist ist dabei e1.data
    Kurt



  • Man bin ich dumm 😞

    Danke!


Anmelden zum Antworten