程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

C++_类和对象_C++运算符重载_函数调用运算符重载

balukai 2025-03-11 13:10:04 文章精选 72 ℃

然后我们再来看函数调用运算符重载,

其实这个,重载后的,函数调用运算符有点像,仿函数,什么是仿函数,一会我们再说

我们去写一个MyPrint类

里面重载函数调用运算符,可以看到函数调用运算符的重载的写法

operator()(),这样的写法在java中是没有的

然后,我们传入一个test参数,然后打印这个参数

上面报错了,需要引入string包

然后我们在test01,方法中,测试

先去创建一个myPrint对象,然后,

直接调用myPrint("hello world");

可以看到,这里传入helloword的时候,跟调用一个方法一样,看起来.

我们执行可以看到,打印出了hello world,木有问题

然后我们再去写一个方法MyPrint02,这是个全局函数.

然后我们在test01中调用.

执行看结果,没问题对吧,但是可以看出来,使用函数调用运算符重载和

直接使用函数调用,是非常非常像的,所以我们把,

上面,我们这种,通过重载函数调用运算符,实现的,通过对象的调用,传入参数,

实现的函数调用运算符重载函数的调用,叫做仿函数.

可以看到,上面有说明

然后,我们可以再去写一个类,MyAdd

可以看到,里面也写了一个,函数调用的运算符重载函数.

我们在test02测试方法中,创建一个,

myadd对象,然后打印,结果去看看

可以看到没问题对吧,

然后这就说明了,仿函数没有一种固定的写法.

可以看到,我们这次写的这个仿函数和之前写的那个仿函数的,参数不一样,

返回值也不一样.

然后我们这里再去看一下,这里提出一个概念,

就是匿名函数对象,

可以看到上面的写法,MyAdd()(100,100),

这里实际上MyAdd(),其实就是返回了一个对象,然后

后面那个(100,100),是调用了,对函数调用运算符的重载函数,

,并且,这个时候,MyAdd(),这样写,会创建一个对象,而且这个对象,没有名字

所以这种方式创建的对象,也叫匿名函数对象.


并且,这个匿名函数对象,的作用域只在这一行中有效.出了这一行就不用了.

所以,当我们,只想使用一次,就销毁这个对象的这种应用场景的时候,就可以

用这个,匿名函数对象.

可以看到,执行结果也没问题.











最近发表
标签列表