当前位置: 首页 > article >正文

C++学习 --函数对象

目录

1, 什么是函数对象

2, 创建函数对象

3, 函数对象的特点

2-1, 像普通函数使用

2-2, 记录调用次数

2-3, 当着参数传递

3, 内建函数对象

3-1, 算数仿函数

3-2, 逻辑仿函数

3-3, 比较仿函数


1, 什么是函数对象

重载函数调用操作符类, 由该类创建的对象叫着函数对象

2, 创建函数对象

//该类中创建了重载函数调用符的方法
class MyClass
{
public:
	int operator()(int a, int b)
	{
		return a + b;
	}
};

int main()
{
	//m就是函数对象
	MyClass m;

	system("pause");
	return 0;
}

3, 函数对象的特点

2-1, 像普通函数使用

//像函数一样使用,所以叫仿函数
m(10, 10);

2-2, 记录调用次数

class MyClass
{
public:
	int operator()(int a, int b)
	{
		//记录调用次数
		m_count++;
		return a * b;
	}
	
	int m_count = 0;
};

2-3, 当着参数传递

void test2(MyClass m, int a, int b)
{
	cout << m(a, b) << endl;
}

void test1()
{
	MyClass m;
	test2(m, 10, 20);
}

3, 内建函数对象

内建函数对象需要包含头文件#include <functional>

3-1, 算数仿函数

negate<int> n;
//取反后输出-10
cout << n(10) << endl;
//加法
plus<int> add;
cout << add(10, 20) << endl;
//减法
minus<int> m1;
cout << m1(100, 10) << endl;
//剩法
multiplies<int> m2;
cout << m2(10, 2) << endl;
//除法
divides<int> d;
cout << d(10, 3) << endl;
//取模
modulus<int> m3;
cout << m3(10, 3) << endl;

3-2, 逻辑仿函数

//大于
greater<int> g1;
cout << g1(10, 20) << endl;
//大于等于
greater_equal<int> g2;
cout << g2(10, 10) << endl;
//小于
less<int> g3;
cout << g3(10, 20) << endl;
//小于等于
less_equal<int> g4;
cout << g4(10, 20) << endl;
//等于
equal_to<int> e1;
cout << e1(10, 20) << endl;
//不等于
not_equal_to<int> e2;
cout << e2(10, 20) << endl;

3-3, 比较仿函数

//与
logical_and<int> l1;
cout << l1(1, 1) << endl;
//或
logical_or<int> l2;
cout << l2(0, 1) << endl;
//非
logical_not<int> l3;
cout << l3(1) << endl;


http://www.kler.cn/a/156391.html

相关文章:

  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
  • kafka面试题解答(四)
  • 实验一:自建Docker注册中心
  • 天才的懈怠 : 平衡二叉树
  • [CKS] 关闭API凭据自动挂载
  • 线上超市小程序可以做什么活动_提升用户参与度与购物体验
  • 活动回顾|德州仪器嵌入式技术创新发展研讨会(上海站)成功举办,信驰达科技携手TI推动技术创新
  • 学习-java多线程面试题
  • 在 Linux 上修改 Oracle 控制文件、日志文件和数据文件的目录的脚本
  • Rust UI开发(五):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)
  • (一)舒尔特表练习记
  • 新手村之SQL——函数多表联结
  • rman SBT_TAPE NFS disk 模拟NBU带库 FRA
  • Android跨进程通信,binder,native层,服务端在servicemanager注册服务
  • 【FAQ】运动健康服务端侧数据常见问题及解答
  • Android 透明度颜色值对照表
  • Apache Flink(六):Apache Flink快速入门 - Flink案例实现
  • SpringBoot框架结合Redis实现分布式锁
  • Mover Creator 用户界面
  • 【设计模式】职责链模式设计在线文档帮助系统
  • 销售员怎样才能做到让客户主动来找?
  • (C++)和为s的两个数字--双指针算法
  • CDA level-2 备考经验分享 转数据分析师CDA证书备考 考试相关说明
  • ZYNQ_project:HDMI
  • ubantu配置网卡ip