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

        本文主要介绍函数操作符()的重载方法。通过对()的重载,我们可以像使用函数一样来使用类对象。为了方便介绍,我们先定义一个类:
    
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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值