重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究
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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号