1、这两个应该是C++中比较高级的用法了。

一、函数调用运算符
 
1、重载函数调用运算符(),必须是成员函数,一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或者类型上有所区别。
 
2、定义了调用运算符的类的对象称作函数对象;函数对象常常作为泛型算法的实参。
 
3、lambda表达式就是一个匿名的函数对象。lambda表达式产生的类不含有默认构造函数、赋值运算符及默认析构函数;它是否含有默认的拷贝/移动构造函数则通常要视捕获的数据成员类型而定。
 
4、标准库定义的函数对象
 
5、C++语言中几种可调用对象:函数、函数指针、lambda表达式、bind创建的对象、重载了函数调用符的类。
 
二、类型转换运算符
 
1、类型转换运算符可以对类类型进行类型转换,转换构造函数和类型转换运算符共同定义了类类型转换。(转换构造函数就是接受参数类型A的构造函数,一般参数数目为1个,这就定义了从A到类类型的转换)
 
2、类型转换运算符是类的一种特殊的成员函数,它负责将一个类类型的值转换成其他类型,形式如下:
operator type() const;
1)type类型要能够作为函数的返回类型,不允许转换成数组或函数类型。
2)类型转换运算符既没有显式的返回类型,也没有形参,而且必须定义为类的成员函数,一般不改变对象的内容,所以被定义成const的。
3)类型转换运算符是隐式执行的,无法给这些函数传递实参。
4)定义向bool类型转换的现象比较普遍。比如IO类型就定义了向bool类型的显示转换。
 
3、显式类型转换explicit
explicit operator int() const { return val;}

1)显式转换会屏蔽隐式转化,要进行显式的请求:static_cast<>()
2)有一个例外,当表达式被用作条件时,会进行自动转化

whie(cin>>val){}
在这个例子中,首先执行输入操作,然后返回cin,cin就被隐式的转换为了bool类型。
3)operator bool一般被定义为explicit的。
 
4、避免二义性转换

[C++] 重载运算符与类型转换(2)——函数调用运算符和类型转换运算符的更多相关文章

  1. JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换

    1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...

  2. C++ Pirmer : 第十四章 : 重载运算符与类型转换之函数调用运算符与标准库的定义的函数对象

    函数调用运算符 struct test { int operator()(int val) const { return (i > 0 ? i : -i); } }; 所谓的函数调用就是一个类重 ...

  3. JavaScript的运算符、条件判断、循环、类型转换(9.25 第十一天)

    JS的运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ 自减 -- 赋值运算符 a=3 a+=3  a=a=3 a-=3   a=a-3 a*=3  a=a*2 a/=3   a=a/3 ...

  4. Python 运算符(算术运算符(+,-,*,**,/,//),逻辑运算符(not , or ,and),比较运算符(>,<,>=,=<),复合运算符(+=,-=,*=,/=,**=,//=))

    # 一.算术运算符(+,-,*,**, /, //, %) # 加法运算符+ print(1 + 2) # 字符串相连 ") # 重载 print([1,2] + [3,4]) # 幂运算* ...

  5. 算数运算符: + - * / //(地板除) %(取余) **(幂运算) / 比较运算符 > < >= <= == !=

    # ### python运算符 #(1) 算数运算符: + - * / //(地板除) %(取余) **(幂运算) var1 = 5 var2 = 8 # +res = var1 + var2 pri ...

  6. [C++ Primer] : 第14章: 重载运算符与类型转换

    基本概念 重载运算符是具有特殊名字的函数: 它们的名字由关键字operator和其后要定义的运算符号共同组成. 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多. 对于二元运算符来说, 左侧 ...

  7. 【C++】C++中重载运算符和类型转换

    输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...

  8. 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

    [源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...

  9. C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配

    类型转换运算符 class SmallInt { public: SmallInt(int i = 0) : val(i) { if (i < 0 || i > 255) throw st ...

随机推荐

  1. c中自增自减的妙用

    #include <stdio.h> int main() { ; printf("%d,%d,%d,%d",i++;i--;++i;--i); /*运算从右往左运算 ...

  2. FaceNet人脸识别研究

    https://github.com/WindZu/facenet_facerecognition (代码) https://segmentfault.com/a/1190000015917420?u ...

  3. 90002CAD相关操作

    第一章   初识CAD 1.1 CAD能干什么 (1)绘制机械图/建筑图/装修图等二维复杂工程图的不二之选.二维设计软件的王者. (2)CAD可以绘制平面图.轴测图(二维线框表示三维图形).立体图(三 ...

  4. vue-cli2.X中引入高德地图,将其设为全局对象

    平时一般未用脚手架构建或用webpack构建的项目只要用script标签引入即可,在vue-cli 2.X构建的项目中,需要用如下方式引入高德地图: 首先在高德地图开放平台中注册开发者账号并获取key ...

  5. 一、mysql数据库,忘记密码怎么处理及处理过程中遇见的问题

    1.输入cmd命令打开控制台: 2.进入mysql.exe所在的路径: 3.执行mysqld --skip-grant-tables(注意:在输入此命令之前先在任务管理器中结束mysqld.exe进程 ...

  6. 使用golang对海康sdk进行业务开发

    目录 准备工作 开发环境信息 改写HCNetSDK.h头文件 开发过程 基本数据类型转换 业务开发 参考 项目最近需要改造升级:操作海康摄像头(包括登录,拍照,录像)等基本功能.经过一段时间研究后,发 ...

  7. Java版SockeDemo案例,有很详细的注释

    一般是用一个线程池来处理接受到的请求 直接上代码(一) ServerThread层 import java.io.BufferedReader; import java.io.InputStreamR ...

  8. 关于hashCode方法的作用

    想要明白hashCode的作用,你必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 你知道它们的区别吗?前者集合内的元素是有 ...

  9. wps10.1中将txt转为excel

    1.将想要保存的内容保存为txt格式,用分隔符分隔好(包括空格.制表符.英文的逗号以及分号四种). 2.打开wps 3.点击数据->导入数据,选择刚才的txt文件 4.一步步操作,即可.

  10. hdu 5037 Frog(贪心)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5037 题解:为了让放的石头有意义肯定是没l+1的距离放2个也就是说假设现在位置为pos那么 ...