Condividi tramite


Chiamata di funzione (C++)

L'operatore di chiamata di funzione, richiamato mediante l'uso delle parentesi, è un operatore binario.

Sintassi

primary-expression ( expression-list )

Osservazioni:

In questo contesto, primary-expression è il primo operando e expression-list, probabilmente un elenco di argomenti vuoto, è il secondo operando. L'operatore di chiamata di funzione viene usato per operazioni che richiedono un certo numero di parametri. Questo procedimento funziona perché expression-list è un elenco e non un singolo operando. L'operatore di chiamata di funzione deve essere una funzione membro non statica.

Quando è sottoposto a overload, l'operatore di chiamata di funzione non modifica le modalità di chiamata delle funzioni, ma il modo in cui deve essere interpretato l'operatore quando viene applicato a oggetti di un dato tipo classe. Ad esempio, il codice seguente sarebbe normalmente privo di significato:

Point pt;
pt( 3, 2 );

Dato un appropriato operatore di chiamata di funzione sottoposto a overload, tuttavia, è possibile usare questa sintassi per compensare le 3 unità della coordinata x e le 2 unità della coordinata y. Questa definizione viene illustrata dal codice seguente:

// function_call.cpp
class Point
{
public:
    Point() { _x = _y = 0; }
    Point &operator()( int dx, int dy )
        { _x += dx; _y += dy; return *this; }
private:
    int _x, _y;
};

int main()
{
   Point pt;
   pt( 3, 2 );
}

Si noti che l'operatore di chiamata di funzione viene applicato al nome di un oggetto e non al nome di una funzione.

È possibile sottoporre a overload l'operatore di chiamata di funzione anche usando un puntatore a una funzione (e non la funzione medesima).

typedef void(*ptf)();
void func()
{
}
struct S
{
   operator ptf()
   {
      return func;
   }
};

int main()
{
   S s;
   s();//operates as s.operator ptf()()
}

Vedi anche

Overload degli operatori