【C++面向对象】函数操作符()的重载
来源:互联网 发布:windows nt3.1 编辑:程序博客网 时间:2024/04/30 14:10
本文主要介绍函数操作符()的重载方法。通过对()的重载,我们可以像使用函数一样来使用类对象。为了方便介绍,我们先定义一个类:
重载函数代码如下:
在主函数中进行如下调用:
我们将Cal对象当做函数进行使用,就意味着它后面可以直接使用()进行传参,而编译器在翻译时,实际上是把cal(10.)这句代码翻译成了cal.operator()(10.0),也就是我们重载()的函数。
最终的运行结果:
class Cal { };
一、实现第一个重载()的函数。
我们想要实现的效果是调用Cal的重载函数,传给Cal一个double类型的参数,然后返回参数的平方。重载函数代码如下:
double operator()(double d){return d*d;}
在主函数中进行如下调用:
int main(){Cal cal;cout<<cal(10.)<<endl;return 0;}
我们将Cal对象当做函数进行使用,就意味着它后面可以直接使用()进行传参,而编译器在翻译时,实际上是把cal(10.)这句代码翻译成了cal.operator()(10.0),也就是我们重载()的函数。
输出结果:
[Hyman@Hyman-PC operator]$ g++ operatorfun.cpp [Hyman@Hyman-PC operator]$ ./a.out 100
二、重载()的函数可以重载多个版本
重载()函数是没有参数个数限制的,这点和其他操作符的重载函数不一样,因为其他操作符往往都有操作数的限制,因此重载函数的参数个数也必须固定。但是函数不同,我们可以重载任意个参数的operator()函数。比如再次重载一个加法函数:int operator()(int i,int j){return i+j;}在main函数中使用
int main(){Cal cal;cout<<cal(10.)<<endl;cout<<cal(8,9)<<endl;return 0;}
运行结果:
[Hyman@Hyman-PC operator]$ g++ operatorfun.cpp [Hyman@Hyman-PC operator]$ ./a.out 10017
三、重载()的函数可以指定默认参数
这点也是和其他操作符的重载不同之处,不过也很容易理解,也是由于操作数限制的原因,其他的操作符重载时不会指定默认参数。我们可以给operatre()指定一个默认参数:int operator()(int i,int j=10){return i+j;}main中的代码
int main(){Cal cal;cout<<cal(10.)<<endl;cout<<cal(8,9)<<endl;cout<<cal(8)<<endl;return 0;}
最终的运行结果:
[Hyman@Hyman-PC operator]$ g++ operatorfun.cpp [Hyman@Hyman-PC operator]$ ./a.out 1001718
0 0
- 【C++面向对象】函数操作符()的重载
- 【C++面向对象】[]操作符的重载
- C++面向对象操作符重载:调用操作符和函数对象
- C#——面向对象——重载操作符——重载运算符
- 【C++面向对象】输入输出操作符的重载
- 详谈面向对象的重载——>“函数重载”与“运算符重载”
- 【C++面向对象】自定义重载操作符
- 【C++面向对象】重载++操作符
- 【C++】面向对象类成员函数的重载、覆盖与隐藏
- C#——面向对象——重载操作符——装箱和拆箱
- C#——面向对象——重载操作符——自定义转换
- 面向对象之函数重载
- 调用操作符的重载与函数对象
- 调用操作符的重载与函数对象
- 调用操作符的重载与函数对象
- 35-函数对象分析-()操作符的重载
- C++面向对象操作符重载:输入输出操作符
- 【C++】对象函数的覆盖、重载、多态
- 画三角形
- js计算你的生肖
- Spring @Transactional工作原理
- 在创维E900-S悦Me盒子上安装第三方软件
- 判断三角形
- 【C++面向对象】函数操作符()的重载
- apt-get build-dep 命令详解
- 高性能场景下,HashMap的优化使用建议
- @RequestBody @ResponseBody
- mac系统环境变量设置
- 169. Majority Element (Easy)
- Spring集合注入的方式(1)
- windows下的session隔离机制以及带来的影响
- android OnGlobalLayoutListener