class的"operator 返回类型 ()" 的重载 就是对(class)的重载,这个重载符不用参数,参数就是自身,并且与函数传递的参数括号等价
如 func(c), 并且多个参数也适用 如 void func(class c, int i ) 等价 void func( (c), ( i ) )
class的 "operator()" 的重载 是对 class()的重载,两者不同。如 class(1), class(2) ……
#include <iostream>
using namespace std;
class
C1{
public:
C1(int k):i(k){}
//(C1)的重载
operator int()
const //int
是返回类型,此重载符函数将(C1)返回了一个int型数据,实现了隐式类型转换
{
return
i;
}
//C1()的重载
const int& operator()(int i) const //这个重载符与上面是两个不同的重载符,
{ //有右值参数,返回一个不可改变的左值引用,防止出现类似 C1() = … 的代码
return i +
1;
}
//数据成员
int i;
};
int func(int c)//测试 函数参数形式的(C1)
{
return c;
}
int func(int c, int i)//测试多参数函数参数形式的 (C1)
{
return
i;
}
int main(int argc, char *argv[])
{
C1 c(10), c1(12);
cout << c(1) << endl;//对c()的测试
int i =
(c);
//以下是对(c)的测试
cout << i << endl;
cout <<
func(c) << endl;
cout << func(c, 11) <<
endl;
cout << func(c, c1) << endl;
return
0;
}
上述代码是做的一个实验,输出为2 10 10 11 12
重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究,布布扣,bubuko.com