Skip to content

Latest commit

 

History

History
76 lines (60 loc) · 2.16 KB

function-call-cpp.md

File metadata and controls

76 lines (60 loc) · 2.16 KB
descriptiontitlems.datehelpviewer_keywordsms.assetid
Learn more about: Function Call (C++)
Function Call (C++)
11/04/2016
function calls, C++ functions
functions [C++], calling
operator overloading [C++], function calls
function overloading [C++], function-call operator
function calls, operator
operators [C++], overloading
operator overloading [C++], examples
function call operator ()
5094254a-045b-46f7-8653-69bc91e80dce

Function Call (C++)

The function-call operator, invoked using parentheses, is a binary operator.

Syntax

primary-expression ( expression-list ) 

Remarks

In this context, primary-expression is the first operand, and expression-list, a possibly empty list of arguments, is the second operand. The function-call operator is used for operations that require a number of parameters. This works because expression-list is a list instead of a single operand. The function-call operator must be a nonstatic member function.

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. For example, the following code would usually be meaningless:

Point pt; pt( 3, 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. The following code shows such a definition:

// function_call.cppclassPoint { public:Point() { _x = _y = 0; } Point &operator()( int dx, int dy ) { _x += dx; _y += dy; return *this; } private:int _x, _y; }; intmain() { Point pt; pt( 3, 2 ); }

Note that the function-call operator is applied to the name of an object, not the name of a function.

You can also overload the function call operator using a pointer to a function (rather than the function itself).

typedefvoid(*ptf)(); voidfunc() { } structS { operatorptf() { return func; } }; intmain() { S s; s();//operates as s.operator ptf()() }

See also

Operator Overloading

close