operator()是什么?怎么用?

thd555 2007-05-16 09:48:54
operator()是什么?怎么用?
能否举例说明?
...全文
9257 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
060 2007-05-21
  • 打赏
  • 举报
回复
先要知道 ()是个什么样的运算符, 在C++里 ()有两种应用,分别是:
1, Cast: (), 就是类型转换,
double x = 3.1;
int i;
i = (int)x;
2, Function Call, 函数调用。
语法是
postfix-expression ( [argument-expression-list ] )

operator()基本都是第二种情况,进行运算符的重载,以实现函数调用。

其实,operator() 就是为了写起来好看, 这样的运算符重载,可以写成普通函数的形式。

yulefox 2007-05-20
  • 打赏
  • 举报
回复 1
重载operator()在STL中被称为函数对象,也叫仿函数……
Golden_Tiger 2007-05-20
  • 打赏
  • 举报
回复
有点意思
coolage31 2007-05-16
  • 打赏
  • 举报
回复
一般就是重载操作符啊
LZ没看书就来问啊 比我还强
xxxdg 2007-05-16
  • 打赏
  • 举报
回复
操作符重载
thd555 2007-05-16
  • 打赏
  • 举报
回复
是否会和构造函数 有 2义性?
oyd 2007-05-16
  • 打赏
  • 举报
回复
我上贴说的楼上是指2楼,不是指xlbdan(流浪剑客)
oyd 2007-05-16
  • 打赏
  • 举报
回复 1
是括号操作符,主要是为了在模板函数中用,模板函数中调用其他函数
楼上的这个例子并不能代表operator ()的真实作用,因为这里的t(10);完全可以用t.somefunction(10)来取代
我这里举个例子:
class test1
{
public:
void operator()(int x)
{
cout<<x<<endl;
}
};
void test2(int x)
{
cout<<x<<endl;
}
template<class OP> void f(OP op) {
op(10);
}
int main()
{
f(test1());
f(test2);
}
这意味着有了()操作符,写模板函数f的人只用在函数体内调用op,而不用管op实际上是一个函数还是一个对象
xlbdan 2007-05-16
  • 打赏
  • 举报
回复
重载的函数操作符,对对象使用起来就像对象是一个函数一样

class A
{
public:
A(int n);
int operator()(int n); //需要一个参数,返回int类型
void output();
int x;
};
A::A(int n):x(n)
{
}
int A::operator()(int n)
{
x=n; //实现.就是令数据成员x等于参数n
return x;
}
void A::output()
{
cout<<x<<endl;
}

int main()
{
A a(3);
a.output(); //输出3
cout<<a(5)<<endl; //a(5)就调用了operator(5),并a.x=5,返回值是int,也就是5
a.output(); //输出a.x,也是5
lightnut 2007-05-16
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>


class Function
{
public:
double operator()(double x)
{ return 2*x;}

};


int main()
{
using namespace std;

Function myFunc;
cout<<myFunc(1.0)<<endl;

system("pause");
}
  • 打赏
  • 举报
回复
class test
{
void operator()(int x)
{
cout<<x<<endl;
}
}
int main()
{
test t;
t(10);
return 0;
}
lightnut 2007-05-16
  • 打赏
  • 举报
回复
operator()是函数调用操作符!
STL中的各种functor就是重载它实现的.
thd555 2007-05-16
  • 打赏
  • 举报
回复
谢谢了
taodm 2007-05-16
  • 打赏
  • 举报
回复
楼主还是买本C++ Primer吧,认认真真学。
thd555 2007-05-16
  • 打赏
  • 举报
回复
回复人:coolage31() ( 一级(初级)) 信誉:100 2007-05-16 10:51:04 得分:0

一般就是重载操作符啊
LZ没看书就来问啊 比我还强
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-_-! 哪本书?介绍一下给我,我是初学者,不知道看什么书
用msdn查不到operator()的例子和说明

65,202

社区成员

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

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