重载符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

原文地址:https://www.cnblogs.com/thbCode/p/3593101.html