elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Duda] Sobrecarga de operadores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Sobrecarga de operadores  (Leído 2,994 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Duda] Sobrecarga de operadores
« en: 13 Junio 2011, 09:20 am »

Estoy haciendo infinidad de pruebas con estas sobrecargas que me han gustado demasiado a tal grado que veo por que dicen que c es tan potente, pero bueno yendo al punto mi problema surge al momento de sobrecargar el operador "+" y realizo varias sumas de mi clase.

El resultado de la prueba debería de ser:  620 pero me da 20 alguien sabe a que se debe?.

Código
  1.  
  2. class clstest
  3. {
  4.    public:
  5.        clstest();
  6.        virtual ~clstest();
  7.        clstest &operator +( clstest &c1 ) {
  8.            clstest tmp;
  9.            int i = c1;
  10.            tmp = (this->sMsg + i);
  11.            return tmp;
  12.        }
  13.        clstest &operator +( int c1 ) {
  14.            clstest tmp ;
  15.            int a = (this->sMsg + c1);
  16.            tmp = a;
  17.            return tmp;
  18.        }
  19.        clstest &operator = (clstest &c1) {
  20.            if ( this != &c1 ) {
  21.                this->sMsg = c1;
  22.            }
  23.            return *this;
  24.        }
  25.        clstest &operator = (int c1) {
  26.            this->sMsg = c1;
  27.            return *this;
  28.        }
  29.        operator int() {
  30.            return sMsg;
  31.        }
  32.        operator double() {
  33.            return (double)sMsg;
  34.        }
  35.    protected:
  36.    private:
  37.        int sMsg;
  38. };
  39.  
  40. clstest::clstest()
  41. {
  42.    //ctor
  43.    this->sMsg=0;
  44. }
  45.  
  46. clstest::~clstest()
  47. {
  48.    //dtor
  49. }
  50.  
  51. int main()
  52. {
  53.    clstest a;
  54.    a = 45;
  55.    a = a + a + 10;
  56.    a = a + a + 10 + a;
  57.    a = a + a;
  58.    int res = a;
  59.    return 0;
  60. }
  61.  
  62.  

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
fantasma306

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: [Duda] Sobrecarga de operadores
« Respuesta #1 en: 13 Junio 2011, 14:35 pm »

el fallo esta en lo que devuelven estas dos funciones...
Citar
        clstest &operator +( clstest &c1 ) {
            clstest tmp;
            int i = c1;
            tmp = (this->sMsg + i);
            return tmp;
        }
        clstest &operator +( int c1 ) {
            clstest tmp ;
            int a = (this->sMsg + c1);
            tmp = a;
            return tmp;
        }

el objeto tmp desaparece al terminar la funcion, lo que tienes que devoler es una copia del objeto, y no la referencia a ese objeto ( ya que no existe )

saludos



En línea

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Duda] Sobrecarga de operadores
« Respuesta #2 en: 13 Junio 2011, 14:59 pm »

Citar

...
4) Ahora el objeto temporal temp se copia a otro objeto temporal sin nombre, y temp es destruido. Y el objeto temporal sin nombre se pasa como parámetro al operador de asignación.
...


http://c.conclase.net/curso/?cap=035b#037_punteros

lo curioso es que solo funciona el código de esta manera:

a = a + a

pero si agrego mas sumando's a la expresión valen chocho.

Dulces Lunas!¡.
« Última modificación: 13 Junio 2011, 15:22 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
fantasma306

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: [Duda] Sobrecarga de operadores
« Respuesta #3 en: 13 Junio 2011, 15:24 pm »


conforme tu lo has puesto, esas funciones estan devolviendo la direccion de TMP (con el &), lo que pasa que TMP a sido destruido... que hay en esas direcciones?? (basura)

si quitas el "&" (que has puesto en el tipo de retorno) estaras devolviendo la copia del objeto a otro objeto temporal sin nombre como dice en la pagina.


(algo que seguro que no necesitas que te lo diga, seguro que ya lo sabes)
es lo mismo que pasa con los parametros por referencia y los parametros por valor
si pones el "&" estaras pasando la direccion de la variable... y si no pones el & se creara una copia temporal de la variable
En línea

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Duda] Sobrecarga de operadores
« Respuesta #4 en: 13 Junio 2011, 20:55 pm »

.
soy un nesio xP gracias, me hiciste revisar nuevamente la pagina.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sobrecarga de operadores (con punteros a clase)
Programación C/C++
Namida 0 3,213 Último mensaje 29 Diciembre 2010, 12:42 pm
por Namida
Ayuda con plantillas y sobrecarga de operadores
Programación C/C++
4rkn63l 2 4,592 Último mensaje 31 Mayo 2011, 21:23 pm
por 4rkn63l
C++ - Sobrecarga de operadores
Programación C/C++
eltongabinghiman 2 2,909 Último mensaje 14 Marzo 2012, 18:14 pm
por x64core
duda con sobrecarga de operadores en clase vector [c++]
Programación C/C++
andoporto 1 3,479 Último mensaje 5 Diciembre 2014, 08:36 am
por eferion
Duda [Sobrecarga de operadores]
Programación C/C++
Abril7 1 1,673 Último mensaje 22 Noviembre 2016, 22:40 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines