Ok, ich arbeite in einem Buch und versuche, C++ Operatorüberladung zu lernen. Ich habe eine BigInt-Klasse erstellt, die für den Konstruktor ein einzelnes int (anfänglich auf 0 gesetzt) verwendet. Ich überlastete die + = Methode und es funktioniert im folgenden Code ganz gut:Overloading Operator + in C++
BigInt x = BigInt(2);
x += x;
x.print(cout);
Der Code wird ausgegeben 4. Also, dann arbeite ich die globalen Betreiber Überlastung + mit dem folgenden Code:
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
Dies funktioniert auch gut für den folgenden Code:
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
Diese 6. Allerdings druckt, wenn ich versuche, den folgenden Code auszuführen, es funktioniert einfach nicht. Das Buch erklärt nicht sehr gut und impliziert, dass es einfach funktionieren sollte.
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
Dieser druckt 1. Ich bin nicht sicher, warum z 1 ist, wenn es 6. Ich online und auf Stackoverflow gegoogelt sein soll, aber ich konnte nicht jemand anderes finden, die ein Problem genau so mit wurde. einige waren nah dran, aber die Antworten passten einfach nicht. Jede Hilfe wird sehr geschätzt!
I don‘t denke, das für Ihr Problem bezieht, sondern aus Gründen der Effizienz (und auch, weil es idiomatische ist in C++) sollte die Argumente' Operator + 'durch konstante Referenz genommen werden, nicht von Wert, z.B. 'BigInt-Operator + (const BigInt & lhs, const BigInt & rhs)' –
Eine Sache, über die ich mich wundere: Warum schreibst du '= BigInt (1)' anstatt nur '= 1'? Ich denke, wenn du uns deine komplette Klassendefinition gezeigt hast, können wir dir besser helfen :) –
Ich stimme Tyler zu. Auch idiomatisch zu initialisieren als 'BigInt x (1);' Die Art, wie Sie es tun, erstellt eine temporäre und ruft dann die Kopie ctor (obwohl das wahrscheinlich optimiert werden würde). – Dan