Wywołanie funkcji (C++)Function Call (C++)

Operator wywołania funkcji wywoływany przy użyciu nawiasów, jest operatorem binarnym.The function-call operator, invoked using parentheses, is a binary operator.

SkładniaSyntax

primary-expression ( expression-list )

UwagiRemarks

W tym kontekście primary-expression jest pierwszym operandem, a expression-list prawdopodobnie pustą listą argumentów jest drugi operand.In this context, primary-expression is the first operand, and expression-list, a possibly empty list of arguments, is the second operand. Operator wywołania funkcji jest używany dla operacji, które wymagają liczby parametrów.The function-call operator is used for operations that require a number of parameters. To działa expression-list , ponieważ jest listą, a nie pojedynczym operandem.This works because expression-list is a list instead of a single operand. Operator wywołania funkcji musi być niestatyczną funkcją składową.The function-call operator must be a nonstatic member function.

Operator wywołania funkcji, gdy przeciążony, nie modyfikuje sposobu wywołania funkcji; Zamiast tego modyfikuje sposób interpretowania operatora w przypadku zastosowania do obiektów danego typu klasy.The function-call operator, when overloaded, does not modify how functions are called; rather, it modifies how the operator is to be interpreted when applied to objects of a given class type. Na przykład następujący kod zwykle będzie miał znaczenie:For example, the following code would usually be meaningless:

Point pt;
pt( 3, 2 );

Przy użyciu odpowiedniego przeciążonego operatora wywołania funkcji można jednak użyć tej składni do przesunięcia x jednostek współrzędnych 3 i y współrzędnych 2.Given an appropriate overloaded function-call operator, however, this syntax can be used to offset the x coordinate 3 units and the y coordinate 2 units. Poniższy kod przedstawia takie definicje:The following code shows such a definition:

// 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 );
}

Należy zauważyć, że operator wywołania funkcji jest stosowany do nazwy obiektu, a nie nazwy funkcji.Note that the function-call operator is applied to the name of an object, not the name of a function.

Można również przeciążać operator wywołania funkcji za pomocą wskaźnika do funkcji (a nie samej funkcji).You can also overload the function call operator using a pointer to a function (rather than the function itself).

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

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

Zobacz teżSee also

Przeciążanie operatoraOperator Overloading