【C++面向对象】函数操作符()的重载

来源:互联网 发布:windows nt3.1 编辑:程序博客网 时间:2024/04/30 14:10
        本文主要介绍函数操作符()的重载方法。通过对()的重载,我们可以像使用函数一样来使用类对象。为了方便介绍,我们先定义一个类:
    
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
原创粉丝点击