书上的例子,大家帮忙看看

y1018799688 2011-05-26 04:39:27

#include"algostuff.h"
using namespace std;

class MeanValue
{
private:
long num;
long sum;
public:
MeanValue() : num(0),sum(0) {};

void operator () (int elem)
{
num++;
sum+=elem;
}

operator double() //这里是什么意思?是重载了还是其他什么的?
{
return static_cast<double>(sum);
}
};


int main()
{
vector<int> coll;
INSERT_ELEMENTS(coll,1,8);

double mv=for_each(coll.begin(),coll.end(),MeanValue());
//for_each返回的不是操作吗?为什么把返回值赋给double

cout<<"mean value is "<<mv<<endl;
}
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
y1018799688 2011-05-26
  • 打赏
  • 举报
回复
貌似理解了,谢谢楼上了
ljt3969636 2011-05-26
  • 打赏
  • 举报
回复
函数对象MeanValue(coll[i])这里你可能看不清楚,这样理解这是个对象,但是表现得象函数一样

MeanValue(int elem)//函数
{
static long num;//对象的成员,看成函数的static变量,每次进入时上次值还存在!
static long sum;
}

ljt3969636 2011-05-26
  • 打赏
  • 举报
回复
给你注释并且伪码化了一下

class MeanValue
{
private:
long num;
long sum;
public:
MeanValue() : num(0),sum(0) {};

void operator () (int elem) //函数对象
{
num++;
sum+=elem;
}

operator double() //这里是什么意思?是重载了还是其他什么的?
{
return static_cast<double>(sum);
}
};

for_each
{
for ( coll.begin()到coll.end() ) MeanValue(coll[i]);//sum+=elem;sum记录coll[i]的累加和coll.begin()到coll.end()所有int元素的和
return MeanValue(coll[i])//返回上面的函数对像,实际调用转换操作符operator double() 返回里面的sum值
};
y1018799688 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 songxian43 的回复:]
能编译通过吗?
operator double() //这里是什么意思?是重载了还是其他什么的?
{
return static_cast<double>(sum);
}
无返回类型,但是返回了值。如果返回了double就是函数重载了。
[/Quote]
编译过了的。。。重载了double函数还是重载了什么? 还有for_each返回值的赋值问题不理解
myj870517 2011-05-26
  • 打赏
  • 举报
回复
void operator () (int elem)
重载括号,没怎么见过.

operator double()
重载了一个符号,这个符号叫double

for_each,从头到尾执行构造?
songxian43 2011-05-26
  • 打赏
  • 举报
回复
能编译通过吗?
operator double() //这里是什么意思?是重载了还是其他什么的?
{
return static_cast<double>(sum);
}
无返回类型,但是返回了值。如果返回了double就是函数重载了。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧