Ok, estoy trabajando en un libro y tratando de aprender la sobrecarga del operador C++. Creé una clase BigInt que toma una sola int (inicialmente establecida en 0) para el constructor. Sobrecargué el + = método y funciona muy bien en el siguiente código:Sobrecarga del operador + en C++
BigInt x = BigInt(2);
x += x;
x.print(cout);
El código es la salida 4. Así, entonces yo estaba trabajando en la sobrecarga del operador global + usando el siguiente código:
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
Esto también funciona muy bien para el siguiente código:
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
Esto muestra 6. sin embargo, cuando trato de ejecutar el código siguiente, simplemente no funciona. El libro no explica muy bien e implica que simplemente debería funcionar.
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
Esto muestra 1. No estoy seguro de por qué z es 1 cuando debería ser 6. Busqué en Google en línea y en stackoverflow, pero no pude encontrar a nadie más que estaba teniendo un problema exactamente como esta. algunos estaban cerca, pero las respuestas no encajaban. ¡Cualquier ayuda es muy apreciada!
No creo que esto esté relacionado con su problema, pero por razones de eficiencia (y también porque es idiomático en C++) los argumentos para 'operator +' deben tomarse por referencia constante, no por valor, p. 'Operador BigInt + (const BigInt & lhs, const BigInt & rhs)' –
Una cosa que me pregunto: ¿Por qué se escribe '= BigInt (1)' en lugar de simplemente '= 1'? Creo que si nos mostró su definición completa de clase, podemos ayudarlo mejor :) –
Estoy de acuerdo con Tyler. También más idiomático para inicializar como 'BigInt x (1);' La forma en que lo hace crea un temporal y luego llama al copiador (aunque probablemente se optimizaría). – Dan