【C++面向对象】函数操作符()的重载
2016-11-10 09:25
309 查看
本文主要介绍函数操作符()的重载方法。通过对()的重载,我们可以像使用函数一样来使用类对象。为了方便介绍,我们先定义一个类:
重载函数代码如下:
在主函数中进行如下调用:
我们将Cal对象当做函数进行使用,就意味着它后面可以直接使用()进行传参,而编译器在翻译时,实际上是把cal(10.)这句代码翻译成了cal.operator()(10.0),也就是我们重载()的函数。
输出结果:
[Hyman@Hyman-PC operator]$ g++ operatorfun.cpp
[Hyman@Hyman-PC operator]$ ./a.out
100
运行结果:
[Hyman@Hyman-PC operator]$ g++ operatorfun.cpp
[Hyman@Hyman-PC operator]$ ./a.out
100
17
最终的运行结果:
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
100
17
三、重载()的函数可以指定默认参数
这点也是和其他操作符的重载不同之处,不过也很容易理解,也是由于操作数限制的原因,其他的操作符重载时不会指定默认参数。我们可以给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 100 17 18
相关文章推荐
- C++ 面向对象(二)—— 操作符重载
- 【C++面向对象】输入输出操作符的重载
- C++ 重载调用操作符和函数对象
- 【C++面向对象】[]操作符的重载
- C++学习之路(2) C++输入输出 new delete操作符 函数重载
- 22、不一样的C++系列--函数调用操作符的重载
- C++成员函数的重载、覆盖与隐藏
- C++ 和 Delphi 的函数覆盖(Override)与重载(overload)
- C++学习之------操作符的重载
- C++的缺省参数与函数重载是正交特性吗?
- C++普通重载,虚函数重载,纯虚函数重载
- C++学习(3)--基础知识(3)--关于操作符的重载
- 高质量C++成员函数的重载、覆盖与隐藏
- [原创] C++操作符重载的变态用途--特征聚焦的子类转换
- 面向对象的 Javascript 函数重载和类型检查
- C++ 和 Delphi 的函数覆盖(Override)与重载(overload
- [C/C++]函数重载、作用域、隐藏
- 面向对象的 Javascript 函数重载和类型检查
- C++的缺省参数与函数重载是正交特性吗?
- 王老师 C++ 函数重载和模板 第二讲