概述:1函数对象可以像普通函数一样有参数和返回值(并且十分的灵活)。
2.可以有自己的状态(可以知道函数被调用了几次),普通函数没有办法做到),除了函数对象,只有通过全局变量和静态变量的方式才可以做到
#include<iostream>//c++中标准的输入和输出流
using namespace std;//该语句的意思是使用标准的名空间
class myadd
{//函数对象的三种使用都是通过重载小括号的形式
public:int operator()(int m, int n)
{
return m + n;
}
};
class myprint
{
public:
myprint()
{
this->num = 0;//计数器应该置为0
//可以在构造函数中赋初值
}
void operator()(string test)
{
cout << test << endl;
this->num++;
}
int num;
};
void test01()
{//函数对象可以像普通函数一样有参数和返回值(并且十分的灵活)
myadd add;
cout << add(10, 90) << endl;;
}
void test02()
{//可以有自己的状态(可以知道函数被调用了几次,
//普通函数没有办法做到)
//只有通过全局变量和静态变量才可以做到
myprint prin;//都是先创建,再赋值
prin("hello world");
prin("hello world");
prin("hello world");
prin("hello world");
cout << "出现的次数为" << prin.num << endl;
//通过具体的对象来得到成员属性
}
void dowork(myprint& mp, string test)
{//必须要以引用的方式传递
//因为引用的方式传递在内存中操控的是同一块内存区域
//而以局部变量的形式传递只是在内存中找另一块空间
//当被调函数返回到主函数时,局部变量的内存被释放了
//相当于没有操控这块内存而造成结果不对
mp(test);//这个时重载函数的形式(仿函数)
}
void test03()
{//函数对象可以作为函数调用的参数
myprint prin;
dowork(prin, "helloworld");
}
int main(void)
{
test01();//函数对象可以像普通函数一样有参数和返回值(并且十分的灵活)
test02();//通过对象来得到成员属性
test03();//函数对象可以作为函数调用的参数
system("pause");
return 0;
}
版权声明:本文为weixin_54907221原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。