Título: sobrecarga de operador<< Publicado por: adam96 en 16 Diciembre 2010, 14:54 pm Bueenas. Estoy intentando hacer esto:
Código
El error que me da: Código: ../src/Test.cpp:29: error: passing ‘const MiClase’ as ‘this’ argument of ‘int MiClase::getnum1()’ discards qualifiers Alguien me echa una manita? Gracias anticipadas. Título: Re: sobrecarga de operador<< Publicado por: satu en 16 Diciembre 2010, 17:23 pm Hola no estoy seguro pero creo que deberias hacerlo asi
Código pero dentro del class Que algún experto diga por qué no funciona como él lo tiene porque yo no lo sé Saludos Título: Re: sobrecarga de operador<< Publicado por: Littlehorse en 16 Diciembre 2010, 18:39 pm @Satu:
No, en realidad no es necesario en este caso declarar la definición junto con la declaración puesto que la definición es encontrada. @adam96 Bienvenido al foro! Lo que sucede es que utilizas un objeto constante que no puede ser modificado desde miembros que si pueden modificar. Cuando haces esto: Código
Estas llamando a getnum1 desde "const MiClase& miobj". Ahora bien, para solucionarlo, basicamente el procedimiento a seguir es asegurarte que ni getnum1 ni getnum2 van a intentar modificar lo que en un principio no esta puesto para modificarse, -const- y si se esta seguro que nada se va a modificar, se declara la función de esta forma: Código
Que equivale a que getnum1 diga: "Envíame lo que quieras que yo no modifico nada ;D" El código debería quedarte así: Código
No lo he probado pero es seguro eso. Cualquier cosa, ya sabes. Saludos! Título: Re: sobrecarga de operador<< Publicado por: satu en 16 Diciembre 2010, 23:49 pm Muchas gracias LH, no sabia eso. Yo aprendí haciéndolo dentro del .h y no sabia que así también podía hacerse. Gracias de nuevo.
Saludos Título: Re: sobrecarga de operador<< Publicado por: adam96 en 17 Diciembre 2010, 12:07 pm Tengo mas dudas:
Código
Ese operator<< lo podría opner como método de la clase y que hiciese la misma tarea? A mi no se me ocurre porque cout no es objeto de Miclase. Y otra cosa: Como hago para que en el operador de asignación detecte que se trata del mismo objeto y no lo borre. Algo como if(*this != objeto_pasado) {el resto del codigo } Los operadores de comparación no funcionan así :( Gracias chic@s Título: Re: sobrecarga de operador<< Publicado por: Littlehorse en 17 Diciembre 2010, 19:10 pm Buenas preguntas (https://foro.elhacker.net/Smileys/navidad/cheesy.gif).
Citar Ese operator<< lo podría opner como método de la clase y que hiciese la misma tarea? No, no exactamente. Se declara como una función libre siempre que este llamando a otra función que haga la tarea, si no es el caso, se declara como friend de la clase en pos que pueda acceder a los miembros privados. Citar Como hago para que en el operador de asignación detecte que se trata del mismo objeto y no lo borre. Bueno podes hacer varias cosas. Realmente depende de si los usuarios de tu clase van o no van a realizar asignaciones así mismos, aunque lo ideal es pensar que siempre son capaces de hacerlo. Si no existe la posibilidad que algo así ocurra bajo ningún aspecto, lo mas sencillo es hacer esto: Código
ahora dependiendo de la complejidad de la clase tal vez haya que añadir bastante código extra. Realmente depende del caso en particular. Saludos! |