Skip to content

函数对象

函数对象概念

概念:

  • 重载函数调用操作符类,其对象常称为函数对象
  • 函数对象使用重载的()时,行为类似函数调用,也成为仿函数. 本质:

函数对象(仿函数)是一个类,不是一个函数.

函数对象的使用

特点:

  • 函数对象在使用的时候,可以像普通函数那样调用,也可以有参数可以有返回值
  • 函数对装超出普通函数的概念,函数对象可以有自己的状态
  • 可以作为参数传递给其他函数

实例:

c++
#include <iostream>
#include <string>
using namespace std;

class Myadd
{
public:
    int operator()(int a, int b)
    {
        return a + b;
    }
};

void test01()
{
    Myadd myadd;
    int result = myadd(10, 20);
    cout << "result = " << result << endl;
}

class Myprint
{
public:
    Myprint()
    {
        count = 0;
    }
    void operator()(string str)
    {
        cout << "print: " << str << endl;
        this->count++;
    }


    int count;
};

void test02()
{
    Myprint myprint;
    myprint("hello world");
    myprint("hello c++");
    cout << "count = " << myprint.count << endl;
}

void doprint(Myprint &myprint, string str)
{
    myprint(str);
}

void test03()
{
    Myprint myprint;
    doprint(myprint, "hello world");
}

int main()
{
    test01();
    test02();
    return 0;
}

总结:

  • 写法非常灵活,可以作为参数进行传递.