[C con Clase] ayuda operator() por favor!!!!!

Steven Davidson srd4121 en njit.edu
Mie Ago 19 20:56:17 CEST 2009


Hola David,

David fire wrote:
> hola
> alguien tiene algo de info sobre la sobrecarga del operador "( )".
> ya se que el codigo se hace ilegible, no lo hice yo toy leyendo un 
> codigo que tiene eso y necesito algo de info apra poder desifrar el 
> codigo. entre ellas este operador es unario? binario? n-ario?

Es n-ario, pero requiere como mínimo un operando, como es lógico.

> se les ocurre alguna forma de saber si se esta usando la sobrecarga
> del operador y no una llamada a funcion? que no signifique saber
> todas las variables del codigo.

Recuerda que una llamada a una función requiere el nombre de la función 
o al menos un puntero a la función. Si usamos el operador () 
sobrecargado, entonces el primer operando es un objeto. Por ejemplo,

class Cuadratica
{
private:
   double x;

public:
   Cuadratica( double xx = 0.0 ) : x(xx) {}

   double operator()( double a, double b, double c )
   {
     return (a*x + b)*x + c;
   }
};

Usamos este operador de la siguiente manera:

int main()
{
   Cuadratica x(5.0);

   cout << "-2x^2 + 3x - 5 = " << x(-2,3,-5) << endl;
   cout << "Nota: x = " << x << endl;

   return 0;
}

Aquí podemos ver claramente que 'x' es un objeto de la clase 
'Cuadratica'. Si 'x' fuese declarada como una función (o un puntero a 
una función), entonces aparecería su prototipo por alguna parte.

Obviamente, se permite la sobrecarga del operador () para que las 
expresiones aparenten ser llamadas a funciones.


Espero haber aclarado la duda.

Steven





Más información sobre la lista de distribución Cconclase