Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/11/2010, 04:46
SegundoAG
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Información A ver si alguien ve donde me equivoco.

Estoy desarrollando una clase contenedor-herramientas para vectores que dispone de una función que multiplica un vector escalarmente con otro.

Código c++:
Ver original
  1. float mult(const ap_vector& data) //multiplica escalarmente con el vector devolviendo el resultado y null si
  2.                                 //tienen distinta dimensión
  3.         {
  4.             float result;
  5.             if (data.dimension != dimension)
  6.             {
  7.                 return 0; //devuelve null si no coinciden las dimensiones
  8.             }
  9.             else
  10.             {
  11.                 int k;
  12.                 for(k=0;k<dimension;k++){result+=elements[k]*data.elements[k];}
  13.                 return result;
  14.             }
  15.         }

la función anterior funciona muy bien y devuelve correctamente el resultado. El problema es el siguiente, deseao crear una nueva función que devuelva la distancia euclidea del propio vector, para ello necesito que se multiplique por si mismo y se realice la raiz cuadrada (libreria correctamente incluida). Aprovechando las características de encapsulación y ahorro de código intenté la expresión autoincluida.

Código c++:
Ver original
  1. float dist(void) //devuelve la distancia euclidea del vector.
  2.         {
  3.  
  4.             return sqrt(mult(*this)); //también intenté con this sólo.
  5.            
  6.         }

y también intenté:

Código c++:
Ver original
  1. float dist(void) //devuelve la distancia euclidea del vector.
  2.         {
  3.             ap_vector *temp;
  4.             temp=new ap_vector(*this);
  5.             return sqrt(mult(temp));
  6.             delete temp;
  7.         }

El problema es con el uso de this y no es el primero que me da problemas. El problema lógicamente tiene solución por otro lado pero la pregunta es un reto para los "freaks" ya que no hay una expresión tan elegante y corta como

return sqrt(mult(this));


y me gustaría saber porqué no funciona (probablemente funcione sin problema en Java).

¡Reto para programadores!