Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Operator wywołania funkcji, wywoływany przy użyciu nawiasów, jest operatorem binarnym.
Składnia
primary-expression ( expression-list )
Uwagi
W tym kontekście primary-expression
jest to pierwszy operand, a expression-list
, prawdopodobnie pusta lista argumentów, jest drugim operandem. Operator wywołania funkcji jest używany w przypadku operacji wymagających wielu parametrów. Działa to, ponieważ expression-list
jest to lista zamiast pojedynczego operandu. Operator wywołania funkcji musi być niestatyczną funkcją składową.
Operator wywołania funkcji, gdy jest przeciążony, nie modyfikuje sposobu wywoływania funkcji; zamiast tego modyfikuje sposób interpretowania operatora w przypadku zastosowania do obiektów danego typu klasy. Na przykład poniższy kod zwykle będzie bez znaczenia:
Point pt;
pt( 3, 2 );
Biorąc jednak pod uwagę odpowiedni przeciążony operator wywołania funkcji, ta składnia może służyć do przesunięcia x
współrzędnych 3 jednostek i y
współrzędnych 2 jednostek. Poniższy kod przedstawia taką definicję:
// 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 pamiętać, że operator wywołania funkcji jest stosowany do nazwy obiektu, a nie nazwy funkcji.
Operator wywołania funkcji można również przeciążyć za pomocą wskaźnika do funkcji (a nie samej funkcji).
typedef void(*ptf)();
void func()
{
}
struct S
{
operator ptf()
{
return func;
}
};
int main()
{
S s;
s();//operates as s.operator ptf()()
}