文档章节

函数对象,重载调用()操作

无奈的初弦
 无奈的初弦
发布于 2014/06/03 19:33
字数 402
阅读 41
收藏 0

函数对象(Function objects是指定义了函数调用操作符(operator())这一成员函数的任意对象。除了可以创建与操作自定义的函数对象以外,C++ 标准库还提供了大量的内置函数对象。

可以为类类型的对象重载函数调用操作符。一般为表示操作的类重载调用操作符。例如,可以定义名为 absInt 的结构,该结构封装将 int 类型的值转换为绝对值的操作:

struct absInt { 
    int operator() (int val) { 
        return val < 0 ? -val : val; 
    }
}

这个类很简单,它定义了一个操作:函数调用操作符,该操作符有一个形参并返回形参的绝对值。

通过为类类型的对象提供一个实参表而使用调用操作符,所用的方式看起来像一个函数调用: 

int i = -42; 
absInt absObj; // object that defines function call operator 
unsigned int ui = absObj(i); // calls absInt::operator(int)

尽管 absObj 是一个对象而不是函数,我们仍然可以“调用”该对象,效果是运行由 absObj 对象定义的重载调用操作符,该操作符接受一个 int 并值并返回它的绝对值。 

函数调用操作符必须声明为成员函数。一个类可以定义函数调用操作符的多个版本,由形参的数目或类型加以区别。 

定义了调用操作符的类,其对象常称为函数对象,即它们是行为类似函数的对象。


© 著作权归作者所有

共有 人打赏支持
上一篇: 链表归并排序
下一篇: 异或的使用
无奈的初弦
粉丝 2
博文 25
码字总数 8623
作品 0
海淀
程序员
私信 提问
C++浓缩(七)

11 章 使用类 运算符重载 友元函数 重载<<运算符,以便于输出 状态成员 使用rand生成随机值 类的自动转换和强制类型转换 类转换函数 本章首先介绍运算符重载,允许标准C++运算符用于类对象-...

人生如梦19
2016/04/05
50
0
C++重载操作符

什么叫重载操作符?这要先说什么是操作符,其实最简单的:+、-、*、/、<

Cloudox_
2017/12/07
0
0
C++的运算符重载

C ++ 中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C ++ 中重新定义这些运算符,赋予已有运算符新的功能...

长平狐
2012/09/03
123
0
C++ primer第二次阅读学习笔记(第14章:重载操作符与转换)

第十四章:重载操作符与转换 重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符含义。 重载操作符时使用默认实参是非法的。...

长平狐
2012/10/08
331
0
关于运算符重载的几点

1.运算符重载 C++中,除了可以对函数重载外,还可以对运算符重载,通过创建运算符函数 operator() 来实现,一般运算符重载作用在类上 。函数operator() 既可以是它将要操作的类的成员,也可以...

Linux小菜
2014/04/28
269
1

没有更多内容

加载失败,请刷新页面

加载更多

Kafka+Flink 实现准实时异常检测系统

1.背景介绍 异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防...

架构师springboot
44分钟前
6
0
DecimalFormat 类基本使用

/* * DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度 * 0 表示如果位数不足则以 0 填充 * # 表示只要有可能就把数字拉上这个位置 * */ public static void main(String[] args){...

嘴角轻扬30
今天
4
0
This APT has Super Cow Powers.

在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有超级牛力 牛力是个什么梗? 则说明你的系统...

taadis
今天
3
0
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
今天
10
0
携手开发者共建云生态 首届腾讯云+社区开发者大会在京举办

本文由云+社区发表 北京时间12月15日,由腾讯云主办,极客邦科技、微信、腾讯TEG协办的首届腾讯云+社区开发者大会在北京朝阳悠唐皇冠假日酒店举办。在会上,腾讯云发布了重磅产品开发者平台以...

腾讯云加社区
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部