#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
//重载函数调用符的类,其对象称为函数对象
//函数对象使用重载的()时,行为类似函数调用,也叫仿函数
//本质:函数对象(仿函数)是一个类,不是函数
//特点:
//函数对象在使用时可以和普通函数一样,有参数有返回值
//函数对象超出普通函数概念,函数对象可以有自己状态
//函数对象可以作为参数传递
//函数对象在使用时可以和普通函数一样,有参数有返回值
class MyAdd
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
void test01()
{
MyAdd myadd;
cout << myadd(1, 2) << endl;
}
//函数对象超出普通函数概念,函数对象可以有自己状态
class MyPrent
{
public:
MyPrent()
{
count = 0;
}
void operator()(string str)
{
cout << str << endl;
count++;
}
int count ;//函数自己的内部状态
};
//函数对象可以作为参数传递
void doprint(MyPrent& mp, string str)
{
mp(str);
}
void test02()
{
MyPrent myprent;
myprent("hello");
myprent("hello");
myprent("hello");
myprent("hello");
myprent("hello");
cout << "myprent调用次数为:" << myprent.count << endl;
}
//函数对象可以作为参数传递
void doprint(MyPrent& mp, string str)
{
mp(str);
}
void test03()
{
MyPrent myprent;
doprint(myprent, "hello");
}
int main()
{
//test01();
//test02();
test03();
return 0;
}