Programación General > C/C++
sobrecarga del operador - (hacerla const)
r0d:
Ok ok, me equivoque. Pero hay algo que no entiendo, es la funcion pP:
--- Código: C++ ---void HugeInt::pP( short arr[], const int pos ) //pP (pedirPrestado), deberia ser const{ for( int i = pos - 1; i >= 0; i-- )//for1 { if( arr[ i ] > 0 ) { --arr[ i ]; while( arr[ ++i ] == 0 && ( i != pos ) ) arr[ i ] = 9; arr[ pos ] += 10; break; } }}// end pP (pedirPrestado) function
Me dices que:
--- Cita de: "lann" ---pP modifica arr asi que no puede ser const, HugeInt operator-( const HugeInt & ) llama a pP asi que HugeInt operator-( const HugeInt & ) no puede ser const, ahorita tratare de hayar una solucion sin modificar valores que tengo masomenos la idea.
--- Fin de la cita ---
pP modificar arr, es verdad, pero arr es pasado por parametro, no es miembro de HugeInt. Entonces no entiendo porque pP no puede ser const.
lann:
linea 10, modifico integer, r0d arr solo es el nombre del argumento de la funcion
--- Código: C++ --- pP( integer, i );
r0d:
Vale, pues es lo que dicia desde el principio: el problema es en el operador -, no en la funccion pP.
Solo hay tres posibilidades:
1. declarar la variable miembra integer como mutable, pero eso es mas feo que la hostia.
2. hacer una copia de integer en una variable temporal para enviar a pP()
3. salir el operador - de la clase, como he propuesto en mi secundo mensage. Esto es, de largo, la mejor solucion.
lann:
El problema en mi implementacion es que ninguna de las 2 funciones es const(de hecho el problema si es en las 2 funciones, en pP y en operator-), si una fuera const entonces tambien la otra lo seria, mi humilde opinion sin ofender es que la mejor posibilidad y no esta en las que indicas es rehacer la implementacion de operator- para que no use funciones de utileria (pP) y no modifique sus argumentos. Y r0d pP no es const y no la puedo hacer const si esta modificando su arreglo, asi que pP no podra ser llamada por objetos const no importa que operator- la implemente como una funcion global amiga de la clase HugeInt.
Navegación
[*] Página Anterior
Ir a la versión completa