05-6 运算符重载-函数调用(小括号)运算符
- 函数调用运算符
()
也可以重载,亦成为:小括号运算符重载。 - 由于重载后的使用方式非常像函数的调用,所以也被称之为:仿函数。
- 仿函数没有固定的写发,非常灵活
提示:仿函数在后续(STL)中大量使用。05-6 运算符重载-函数调用(小括号)运算符05-6 运算符重载-函数调用(小括号)运算符。
完成函数调用(小括号)运算符重载有两种方法:
- 在成员函数里面实现重载。
完成函数调用(小括号)运算符重载的语法:void operator()(形式参数列表)
-
在成员函数里面实现重载。
class test { public: int operator()(int a) { cout << "a= " << a << endl; return 0; } };
实际内容:
#include
using namespace std; class test { public: int operator()(int a) { cout << "a= " << a << endl; return 0; } }; int main() { class test t1; int a = 10; t1(a); return 0; } 运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
a= 10
-
匿名函数对象
在上面的例子中,我们在类
test
中重载了一个小括号。这时候调用这个小括号需要对象(传入的形参)
。但是如果我不想专门实例化一个对象,则可以创建匿名函数对象:#include
using namespace std; class test { public: int operator()(int a) { cout << "a= " << a << endl; return 0; } }; int main() { test()(100); return 0; } 在这里,运行
test()(100);
会实例化一个test
类的对象。使用完成后会立即删除。这就是匿名函数对象。
- 注意:
- 小括号重载(仿函数)只能在成员函数中重载
- 可以生成匿名函数对象
- 仿函数基本可以当做函数使用。
:-)