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 originalfloat mult(const ap_vector& data) //multiplica escalarmente con el vector devolviendo el resultado y null si
//tienen distinta dimensión
{
float result;
if (data.dimension != dimension)
{
return 0; //devuelve null si no coinciden las dimensiones
}
else
{
int k;
for(k=0;k<dimension;k++){result+=elements[k]*data.elements[k];}
return result;
}
}
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 originalfloat dist(void) //devuelve la distancia euclidea del vector.
{
return sqrt(mult
(*this
)); //también intenté con this sólo.
}
y también intenté:
Código c++:
Ver originalfloat dist(void) //devuelve la distancia euclidea del vector.
{
ap_vector *temp;
temp=new ap_vector(*this);
delete temp;
}
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!