13-04-2013, 20:10
Antes que nada, estuve buscando sobre el uso de templates en internet y sobre todo en que radica mi problema pero hasta ahora no encontre nada muy satisfactorio. Para no perder mas tiempo dejo la consulta en el foro a ver si alguno sabe en que me puedo estar equivocando.
Les dejo las partes pertinentes del codigo, cualquier cosa el resto lo edito. Aclaro: La clase esta reducida, no tiene los constructores ni otras funciones que uso. Si la llegasen a necesitar, edito.
El problema lo tengo con el siguiente ejercicio:
Modificar el punto anterior para permitir la suma (+), resta (-) y asignación de objetos tipo Punto.
Nota: tener en cuenta que las operaciones de deben controlar que los valores de x e y, no desborden el rango de +/- 1000.
No utilizar friend, para realizar la sobrecarga de los operadores suma (+) y resta (-).
Como preguntas / restriccion:
¿Requiere sobrecargar el operador de asignación ? ¿Por qué?
Justifique la ejecución de la línea q=r+47; (como se produce la suma entre el objeto Punto y el objeto int, suponiendo que mantuvo la consigna de escribir lo menos posible y no sobrecargó la suma de Punto con int)
Con respecto al codigo:
Con respecto a la sobrecarga del operador +:
Ahora en el main cuando algo como:
A = B + C; (siendo A, B y C objetos Punto). Obtengo el siguiente error:
Mi idea es sobrecargar el operador + para poder sumar tanto mis objetos Punto como otros tipos (no me refiero a otros objetos).
De lo que estuve leyendo sobre templates evito inicializar con un tipo de variable a la funcion miembro operador + despues de haber instanciado uno o mas objetos punto.
O sea no hago:
A = B +<Punto>C;
Si necesitan mas aclaraciones, el codigo completo o algo en particular; edito el post. De momento sigo buscando las maneras de arreglar mi error o de usar debidamente el template.
Por si les interesa el uso de template lo estuve leyendo en:
Template para dummies
Una de las paginas mas completas en el uso del template que encontre en estos dias de busqueda.
Les dejo las partes pertinentes del codigo, cualquier cosa el resto lo edito. Aclaro: La clase esta reducida, no tiene los constructores ni otras funciones que uso. Si la llegasen a necesitar, edito.
El problema lo tengo con el siguiente ejercicio:
Modificar el punto anterior para permitir la suma (+), resta (-) y asignación de objetos tipo Punto.
Nota: tener en cuenta que las operaciones de deben controlar que los valores de x e y, no desborden el rango de +/- 1000.
No utilizar friend, para realizar la sobrecarga de los operadores suma (+) y resta (-).
Como preguntas / restriccion:
¿Requiere sobrecargar el operador de asignación ? ¿Por qué?
Justifique la ejecución de la línea q=r+47; (como se produce la suma entre el objeto Punto y el objeto int, suponiendo que mantuvo la consigna de escribir lo menos posible y no sobrecargó la suma de Punto con int)
Con respecto al codigo:
class Punto
{
private:
double mx;
double my;
public:
template <class T> Punto operator +(const T &);
};
Con respecto a la sobrecarga del operador +:
template <class T> Punto Punto::operator +(const T &op)
{
Punto C;
if(sizeof(T) == sizeof(Punto))
{
C.setPunto(mx + op.mx, my + op.my);
}
else
{
C.setPunto(mx + op, my);
}
return C;
}
Ahora en el main cuando algo como:
A = B + C; (siendo A, B y C objetos Punto). Obtengo el siguiente error:
Cita:main.cpp:18: error: undefined reference to `Punto Punto::operator+<Punto>(Punto const&)'
Mi idea es sobrecargar el operador + para poder sumar tanto mis objetos Punto como otros tipos (no me refiero a otros objetos).
De lo que estuve leyendo sobre templates evito inicializar con un tipo de variable a la funcion miembro operador + despues de haber instanciado uno o mas objetos punto.
O sea no hago:
A = B +<Punto>C;
Si necesitan mas aclaraciones, el codigo completo o algo en particular; edito el post. De momento sigo buscando las maneras de arreglar mi error o de usar debidamente el template.
Por si les interesa el uso de template lo estuve leyendo en:
Template para dummies
Una de las paginas mas completas en el uso del template que encontre en estos dias de busqueda.