首页 > 编程语言 >c++ 为什么引入函数对象?

c++ 为什么引入函数对象?

时间:2023-11-25 20:14:28浏览次数:30  
标签:调用 函数 对象 可以 c++ 引入 函数指针

C++引入函数对象主要是因为函数对象具有以下优势:

  1. 函数对象可以有自己的状态:我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。但是函数调用没这种优势,除非它使用全局变量来保存状态。

  2. 函数对象有自己特有的类型,而普通函数无类型可言:这种特性对于使用C++标准库来说是至关重要的。这样我们在使用STL中的函数时,可以传递相应的类型作为参数来实例化相应的模板,从而实现我们自己定义的规则。

  3. 函数对象可以携带附加数据:这是函数对象相比于函数指针的一个重要优势。例如,你可以在函数对象中保存一些额外的信息,然后在调用函数对象时使用这些信息。

  4. 函数对象可以封装类成员函数指针:因为函数对象可以携带附加数据,而成员函数指针缺少一个类实体 (类实例)指针来调用,因此,可以把类实体指针给函数对象保存起来,就可以用于调用对应类实体成员函数了。

因此,虽然函数对象在使用方式上与函数指针相似,但是由于以上的优势,函数对象在很多情况下是更好的选择。希望这个解释对你有所帮助!

 

标签:调用,函数,对象,可以,c++,引入,函数指针
From: https://www.cnblogs.com/whcjob/p/17855977.html

相关文章

  • 函数式编程注意点
    函数式编程&lambda表达式今天在回顾学习java动态数组的基本操作时,学到:如果测试者要拿到方法内属性时,可以用函数式编程获取。函数式编程关注:返回值和参数个数。Consumer类返回类型void,参数只有一个,调用其accept方法用来操作。{{uploading-image-867431.png(uploading...)}}......
  • 11.25-task3变量与函数
    变量与函数变量变量是一个名字,用来储存一段数据!变量的值可变化,新值会覆盖之前的值变量相当于一个标签,如a=10,在内存中找一个位置,把地址赋给了a。。命名规则数字不能开头!最好不要用保留字符作为变量名!!!!多变量赋值在进行多变量赋值时,需要将变量之间用,隔开等号右边......
  • C++回调函数的定义和调用
    文章目录一、C++回调函数1.C/C++回调函数2.普通回调3.函数指针4.C++类的静态函数作为回调函数5.类的非静态函数作为回调函数6.Lambda表达式作为回调函数7.std::funtion和std::bind的使用二、其他参考资料 一、C++回调函数C++回调函数1.C/C++回调......
  • 变量与函数
    变量与函数变量新值会覆盖旧值新值数据类型不必与旧值相同**变量是一个标签变量命名规则必须以字母或下划线开头命名可由字母、数字、下划线组成大小写敏感尽量避免使用保留字命名更新变量x=5x+=2print(x)7多变量赋值a,b,c=1,2,3#元组的解包print(f......
  • map函数用法
    map函数用法描述map()根据提供的函数对指定序列做映射fuction以每一个元素调用,并且返回每次fuction函数返回值的新列表语法map(fuction,iterable,)​函数一个或多个序列def**square(x):#计算平方数 return**x**2map(square,[1,2,3,4,5])......
  • 无涯教程-Tk - Scale部件函数
    比例小部件用于通过滑块选择数字值。scale小部件的语法如下所示-scalescaleNameoptionsScale-参数下表中列出了可用于缩放窗口小部件的选项-Sr.No.Syntax&Remark1-backgroundcolor用于设置小部件的背景颜色。2-borderwidthwidth用于在3D效果中使用边框绘......
  • Python:数据类型与操作,变量与函数
    数据类型1.整数Integer(int)2.浮点数Float(默认双精度)3.布尔值Boolean(bool)4.类型Typeprint(type(2))<class'int'>`print(type(2<2.2))<class'bool'>print(type(type(2)))<class'type'>常数1.python内置常量Ture,用于表示布尔真False......
  • 十七、C++字符串(二)
    十七、C++字符串(二)1、字符串的应用需求:设计一个程序,用户输入属性id或者pass或者role可以把对应的内容显示出来,给定字符串如下:stringstr{"id=user;pass=632105;role=郝英俊;"};//设计一个程序,用户输入属性id或者pass或者role可以把对应的内容显示出来#include<iostream>......
  • 无涯教程-Tk - Scrollbar部件函数
    滚动条小部件是无需文本或画布小部件即可工作的滚动小部件。滚动条小部件的语法如下所示。scrollbarscrollbarNameoptionsScrollbar-参数下表列出了可用于滚动条小部件的选项。Sr.No.Syntax&Remark1-backgroundcolor用于设置小部件的背景颜色。2-borderwidt......
  • 无涯教程-Tk - Progressbar部件函数
    Progressbar窗口小部件用于提供长时操作(如文件上传)进度的视觉反馈。进度栏小部件的语法如下所示-progressbarprogressbarNameoptionsProgressbar-参数下表在下表中列出了Progressbar小部件可用的选项-Sr.No.Syntax&Remark1-lengthnumber设置小部件的长度。2......