Dev - C++ - Sobrecarga del operador igual

 
Vista:

Sobrecarga del operador igual

Publicado por ana (Santander) (1 intervención) el 20/04/2007 17:08:55
Hola a todos, tengo un problema y no entiendo el pq:

tengo sobrecargado el operador = en una clase, de tal forma que cuando a un objeto de esa clase le asigno otro objeto directamente, no pasa nada y funciona, pero si a un objeto de esa clase le asigno el resultado de una operacion (cuyo resultado es otro objeto de esa clase) no funciona. ¿POR QUE?

El codigo es el siguiente


#include<iostream.h>
class coordenada
{ private:
int x,y,z;
public:
coordenada(int a=0, int b=0, int c=0);
coordenada operator +(coordenada &op);
coordenada& operator =(coordenada &op);
void ver();
};
coordenada::coordenada(int a, int b,int c)
{ x=a;
y=b;
z=c;}
coordenada coordenada::operator+(coordenada &op)
{ coordenada nuevo;
nuevo.x=x+op.x;
nuevo.y=y+op.y;
nuevo.z=z+op.z;
return nuevo;}

coordenada& coordenada:: operator=(coordenada &op)
{ x=op.x;
y=op.y;
z=op.z;
return *this;}

void coordenada::ver()
{ cout<<"X= "<<x<<endl;
cout<<"Y= "<<y<<endl;
cout<<"Z= "<<z<<endl;}

int main()
{ coordenada c1;
coordenada c2(1,2,3);
coordenada c3;
c1.ver();
c2.ver();
c3.ver();
c4=(c3+c2); -->//ERROR!!!
c4.ver();
system("PAUSE");
return 0;
}

Espero que alguien me pueda ayudar
Gracias de antemano
Una saludo
Ana
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sobrecarga del operador igual

Publicado por Nibble (3 intervenciones) el 21/04/2007 22:10:34
El problema es que la sobrecarga que usted ha realizado unicamente sirve para igualar dos objetos. Ahora usted desea igualar a un objeto un valor, supongo que sera a a una instancia de ese objeto o elemento privado.

La solucion es hacer una nueva sobrecarga sobre el mismo operador '=', no habra problema ya que el compilador detecta un nuevo parametro que sera el valor (entero, punto flotante, etc...).

coordenada coordenada::operator+(coordenada &op, int valor)
{
nuevo.x=valor;
return *this;
}


En este caso el entero se iguala a la expresion a la izquierda del signo =, ejemplo:

op=4;

El return *this es para devolver el objeto que actualmente se esta utilizando, en tu caso op.

Suerte!!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sobrecarga del operador igual

Publicado por Nibble (3 intervenciones) el 21/04/2007 22:12:41
Perdon, el prototipo de la funcion es:

coordenada coordenada::operator=(coordenada &op, int valor)

no

coordenada coordenada::operator+(coordenada &op, int valor)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sobrecarga del operador igual

Publicado por pitukilloloco (1 intervención) el 21/04/2007 22:40:10
En la línea que marcaste que da error la variable c4 no está definida. Por otra parte, definiendo esta variable como una clase coordenada, compilé tu programa con el Dev C++ 4.9.9.2 y efectivamente marca un error en esa línea pero compilándolo con el Visual C++ 2005 no marca error alguno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sobrecarga del operador igual

Publicado por Ana (10 intervenciones) el 25/04/2007 11:45:28
Y por que puede ser??? Que requiere el Dev-C++ para que funcione???
No puedo entender que el mismo codigo en un compilador funcione y en otro no.
Si por un casual sabes el motivo por el cual puede ser, me seria de gran utilidad que me lo dijeses.
Muchas gracias por tu colaboracion
Un Saludo
Ana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar