函数对象的三种基本使用 c++ 简单易懂

  • Post author:
  • Post category:其他


概述: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 版权协议,转载请附上原文出处链接和本声明。