C++类重载 operator()
文章目录
- 一、代码举例
- 二、重载operator()作用
- 三、优势
- 四、使用举例
- 1)当callback函数使用,用以通用操作
- 2)谓词函数
- 五、注意事项
一、代码举例
class ClassAction
{public:void operator()(){......}
private:int dataValue;
}
二、重载operator()作用
c++类可以重载()【即小括号符】,来实现仿函数,或者叫函数对象。那么这个类可以行使函数的功能,用以优雅的实现一些功能
- 实例举例代码
class FuncClass
{
public:void operator()(const string& str) const{std::cout << str << std::endl;}
};
int main()
{ FuncClass myFuncClass; myFuncClass("hello world");
}
三、优势
与普通函数相比,函数对象(仿函数)比普通函数更加灵活,函数对象的优势:
1)函数对象可以有自己的状态。我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态;
2)函数对象有自己特有的类型。我们可以传递相应的类型作为参数来实例化相应的模板,比如说带参数的函数形参。
四、使用举例
1)当callback函数使用,用以通用操作
class ShorterThan
{
public: explicit ShorterThan(int maxLength):length(maxLength) {} bool operator() (const string& str) const { return str.length() < length; }
private: const int length;
};
int main()
{ vector<string> myVec; myVec.push_back("Jack"); myVec.push_back("Llihass"); myVec.push_back("tTT"); int result = count_if(myVec.begin(), myVec.end(), ShorterThan(4)); cout << "count: " << result << endl;
}
2)谓词函数
谓词函数通常用来对传进来的参数进行判断,并返回布尔值。但是一般的函数形式固化,比如字符串长度比较只能判断是否大于一个确定的长度值。函数对象可以作为谓词函数,并可以在类初始化时传递参数,如字符串长度参考值,因此函数对象比普通函数更加灵活。
class Upper
{
public: Upper(int min = 0):m_min(min){} bool operator() (int value) const { return value >= m_min; }
private: int m_min;
};
int main()
{vector<int> intVec;intVec.push_back(10);intVec.push_back(6);intVec.push_back(12);vector<int>::iterator targetIterator = find_if(intVec.begin(), intVec.end(), Upper(10));if (targetIterator != intVec.end()){cout << "value: " << *targetIterator << endl;}
}
- 调用流程
首先生成类 Upper 的对象,并用 10 初始化,调用find_if 时将用该函数对象进行判断。
五、注意事项
在调用用到函数对象的标准库算法时,除非显式地指定模板类型为传引用,否则默认情况
下函数对象是按值传递
的!
C++类重载 operator()相关推荐
- 通过从全局和类内部重载operator new /delete来获取内存管理权
目录 1.通过重载获得内存管理权 2.容器的内存管理 3.重载new.array new.replacement new,接管内存控制权 1.重载全局::operator new / ::operat ...
- C++——运算符重载operator
C++--运算符重载operator C++ prime plus第11章,运算符重载是C++的一种多态.运算符重载格式如下: operator运算符(argument-list) 1.做普通函数重载 ...
- 【C++】运算符重载 Operator Overload
运算符重载 Operator Overload 可以为运算符增加一些新的功能 class Point { private:int m_x;int m_y; public:Point(int x, in ...
- 实验7.1 对Point类重载“++”(自增)、“–”(自减)运算符
题目 定义Point类,有坐标_x,_y两个成员变量:对Point类重载"++"(自增)."–"(自减)运算符,实现对坐标值的改变. C++代码如下: #inc ...
- 【转】C++中如何区分构造函数与重载operator()得到的仿函数?
转自:C++中如何区分构造函数与重载operator()得到的仿函数?求大神!_360问答 此外,你觉得仿函数(functor)是否能完全取代function呢? 以下是个人使用C++仿函数,func ...
- 类的operator new与operator delete的重载
为什么有必要写自己的operator new和operator delete? 答案通常是:为了效率. 缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块.同样 ...
- C++ Time类重载运算符
题目描述 设计一个时间类Time,要求: 1.包含时(hour),分(minute),秒(second)私有数据成员: 2.包含构造函数,重载关于一时间加上另一时间的加法运算符"+" ...
- [YTU]_2440( C++习题 复数类--重载运算符+,-,*,/)
题目描述 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符 ...
- [YTU]_2443 ( C++习题 复数类--重载运算符3+)
题目描述 请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值.定义Complex(复数)类,在成员函数中包含重载类型转 ...
最新文章
- 使用python的while语句,编写简单门票与年龄计算器
- python做小程序-抖音最火的整蛊表白小程序如何做出来的?教你用python做出
- 【云计算】云计算从业者导学
- integer对应java类型_Java中的Integer和int等包装类和基本数据类型简单比较
- 登录代码,程序不是作文
- Spring简化Java开发_第1章—Spring之旅—简化Spring的java开发
- 学计算机应用基础学到了什么,2021年学习计算机应用基础心得体会-得范文网
- 前端开发常用网站整理
- 窃听信道模型中的保密通信性能研究
- 测试高中低音的软件6,分别用什么音乐来测试设备的高中低音。
- Go-获取整形切片中的最大值最小值
- text生成pdf之ctexwineditmiktexgbk2uni的安装使用方法
- 可用于微信公众平台的机器人
- 李彦宏:有人弄死其他对手 自己也没好结果
- BitComet的简介与下载
- ftp下载工具绿色版,ftp下载工具有绿色版的吗?教程详解
- DataWhale天池-金融风控贷款违约预测-Task01赛题理解
- 《数字语音处理》- 实验4. 基于MATLAB与VQ的特定人孤立词语音识别研究(附代码)
- python数据分析——pyecharts柱状图全解(小白必看)
- 100 个知名网站源码