文档章节

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

无奈的初弦
 无奈的初弦
发布于 2014/06/03 19:33
字数 402
阅读 36
收藏 0
点赞 0
评论 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++的运算符重载

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

长平狐
2012/09/03
98
0
C++浓缩(七)

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

人生如梦19
2016/04/05
50
0
C++ primer第二次阅读学习笔记(第14章:重载操作符与转换)

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

长平狐
2012/10/08
179
0
C++重载操作符

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

Cloudox_
2017/12/07
0
0
关于运算符重载的几点

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

Linux小菜
2014/04/28
255
1
C++ 解引用(*)和箭头(->)运算符的重载

重载要求: 1、箭头运算符必须是类的成员函数。解引用运算符一般也应该声明为类的成员函数,但不是必须。 2、箭头用算符返回值必须是一个指针,或者是一个重载了箭头运算符的对象。 a)如果返...

C_Geek
2016/01/15
937
0
C++ operator关键字(重载操作符)

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符...

mac_zhao
2015/11/03
0
0
细谈C++的运算符重载

什么是运算符重载? 顾名思义就是将原本的操作符以我们的方式定义出来,方便我们使用。 为什么要进行运算符重载? 简单的理由就是将减少程序员的工作量,首先先看一个简单的例子: 1 2 3 4 ...

乐搏学院
2016/12/21
3
0
细谈C++的运算符重载

什么是运算符重载? 顾名思义就是将原本的操作符以我们的方式定义出来,方便我们使用。 为什么要进行运算符重载? 简单的理由就是将减少程序员的工作量,首先先看一个简单的例子: 1 2 3 4 ...

乐搏学院
2016/12/20
0
0
Kotlin学习(十七): 运算符重载

日本编程丛书-图片源于网络 在前面写了关于集合和范围的内容,里面包括了一点运算符重载的内容,在这里我们来详细了解运算符重载的知识,内容参考《Kotlin实战》(Kotlin in Action)。 什么...

叫我旺仔
2017/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部