C++ 函数对象

1 概念

将()运算符重载为一个类的成员函数,这个类就称为函数对象类。这个类的对象就是函数对象。
函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。
举个例子:

class CAverage
{
public:
    //重载()运算符
    double operator()(int a1, int a2, int a3)
    {  
        return (double)(a1 + a2 + a3) / 3;
    }
};
int main()
{
    CAverage average;  //能够求三个整数平均数的函数对象
    cout << average(3, 2, 3);  //等价于 cout << average.operator(3, 2, 3);
    return 0;
}

average.operator(3, 2, 3);的调用可以简化为average(3, 2, 3),看起来像函数的调用方式 function(args),所以称为函数对象

2 应用

在这里插入图片描述
例如,如果要求两个 double 型变量 x、y 的乘积,可以写:
multiplies<double> () (x, y)

less 是 STL 中最常用的函数对象类模板,其定义如下:
template <class_Tp>
struct less
{
    bool operator() (const_Tp & __x, const_Tp & __y) const
    { return __x < __y; }
};
要判断两个 int 变量 x、y 中 x 是否比 y 小,可以写:
if( less<int>()(x, y) ) { ... }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值