Título: Sobrecarga operador + Publicado por: _Enko en 5 Febrero 2015, 15:43 pm Hola, estoy practicando el tema de sobrecarga y me tope con 2 problemas. :silbar:
Código Por alguna razon, cuando sobrecargo el operador +, Visual Studio 2010 me exigue que el parametro sea una referencia simple "Foo& f" y no const. Si coloco const, salta error que no puede convertir de const & a & desde el metodo Foo::getBar(). No tengo visual studio a mano como pasar el error exacto. (passing `const Foo' as `this' argument of `int Foo::getBar()' discards qualifiers ) Otra cosa, en http://www.parashift.com/c++-faq/overview-op-ov.html Coloca este ejemplo Código: Fred operator+ (Fred const& x, Fred const& y); Será que tiene solamente parcial soporte de c++11? Saludos y Gracias Título: Re: Sobrecarga operador + Publicado por: eferion en 5 Febrero 2015, 15:55 pm getbar no es const, no puedes llamar a un método "no const" desde una referencia "const".
Por otro lado, el otro ejemplo que has puesto: Código
Este ejemplo únicamente compila si el operador se sobrecarga fuera de la clase "Fred". Eso sí, para asegurar un funcionamiento óptimo lo suyo es hacer que este método sea "friend" de la clase "Fred". Título: Re: Sobrecarga operador + Publicado por: _Enko en 5 Febrero 2015, 17:58 pm Muchas gracias :)
Tiene sentido si se toma "Foo const& f" como referencia a Foo constante, all llamar a algun metodo de f, es posible que este modifique el objeto. Entonces, "const Foo& f" es lo mismo que "Foo const& f"? Hay alguna manera de hacer "constante referencia a Foo" y no "referencia a Foo constante"? Me refiero a : Código
Es decir, que se pueda cambiar los miembros de la referencia, pero no la referencia. PD, creo que correctamente seria asi el la sobrecarga de +? Código
Y tambien, + tendria que devolver objeto nuevo mientras que += referencia al objeto? Código
Saludos y Gracias. Título: Re: Sobrecarga operador + Publicado por: eferion en 6 Febrero 2015, 08:04 am Entonces, "const Foo& f" es lo mismo que "Foo const& f"? Es lo mismo sí. Hay alguna manera de hacer "constante referencia a Foo" y no "referencia a Foo constante"? Foo& variable -> "constante referencia a Foo" const Foo& variable -> "referencia a Foo constante" Cuando declaras una referencia, el compilador te obliga a darle un valor en ese mismo momento. Despuées de la inicialización, verás que no vas a poder modificar la referencia. Es decir, el enlace de referencia es constante siempre. Debido a esto, el modificador "const" únicamente tiene sentido si amplía la cobertura... y de la única forma en la que puede hacer esto es haciendo que la clase o variable sea de solo lectura. PD, creo que correctamente seria asi el la sobrecarga de +? Código
Es una forma de implementarlo... ahora, si Foo tiene un constructor que permite inicializar "bar_", es un poco más eficiente llamar a dicho constructor: Código
Por cierto, nota el "const" de la función... los operadores que no tienen el igual no deberían modificar la instancia actual y deberían, por tanto, ser "const". Puede parecer una tontería, pero ya has visto que si un miembro no tiene el modificador "const" no puedes usarlo en una función "const". Y tambien, + tendria que devolver objeto nuevo mientras que += referencia al objeto? A ver, el operador "+" tiene que devolver un objeto nuevo porque, como te he comentado antes, este operador no debe modificar la instancia actual. Crear un objeto nuevo responde a la necesidad de devolver el resultado en un objeto que no sea el actual. El operador "+=" si que tiene que modificar la instancia actual y, dado que al finalizar la función la instancia actual tendrá el valor bueno, suele ser más eficiente devolver una referencia que crear un objeto nuevo basado en el valor actual. Espero haberte resuelto las dudas. Un saludo. Título: Re: Sobrecarga operador + Publicado por: _Enko en 6 Febrero 2015, 14:56 pm Muchas gracias eferion :D
Me has sacado un monton de dudas y puntos de foco debiles ;-) Gracias nuevamente :) Y pueden dar por cerrado el tema ^^ |