设为首页 加入收藏

TOP

8.4.6 重载函数调用操作符
2013-10-07 16:07:36 来源: 作者: 【 】 浏览:51
Tags:8.4.6 重载 函数 调用 操作

8.4.6  重载函数调用操作符

函数调用操作符是(),因此,此操作符的函数重载是operator()()。重载函数调用操作符的类对象称为函数对象或仿函数(functor),因为我们可以像使用函数名一样使用对象名。先来看一个简单的例子。下面是重载了函数调用操作符的一个类:

  1. class Area  
  2. {  
  3. public:  
  4. int operator()(int length, int width) { return length*width; }  
  5. }; 

此类中的操作符函数计算一个面积,它是两个整数实参的乘积。为了使用此操作符函数,只需要创建一个类型为Area的对象,例如:

  1. Area area;                                               // Create function object  
  2. int pitchLength(100), pitchWidth(50);  
  3. int pitchArea = area(pitchLength, pitchWidth);    // Execute function call overload 

第一条语句创建第三条语句中使用的area对象,第三条语句使用此对象来调用对象的函数调用操作符。在此例中,返回的是足球场的面积。

当然,也可以将一个函数对象传递给另一个函数,就像传递任何其他对象一样。看看下面这个函数:

  1. void printArea(int length, int width, Area& area)  
  2. {  
  3. cout << "Area is " << area(length, width);  

下面是使用此函数的语句:

  1. printArea(20, 35, Area()); 

这条语句调用printArea()函数,前两个实参分别指定矩形的长和宽。第三个实参调用默认构造函数,以创建一个Area对象,函数中计算面积时要使用此Area对象。因此,函数对象提供了一种方式,可以将函数作为实参传递给另一个函数。与使用函数指针相比,这种方式既简单又容易。

注意:第10章将学习std::function<>模板,它为传递函数提供了更大的灵活性。

定义函数对象的类一般不需要数据成员,也没有定义的构造函数,因此创建和使用函数对象的开销是最小的。函数对象类通常也定义为模板,因为这会增加灵活性,本章稍后将会介绍这一点。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.4.4 重载加法运算符(2) 下一篇8.5 对象复制问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)