zoukankan      html  css  js  c++  java
  • 重载符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

  • 相关阅读:
    servlet程序开发
    jsp九大内置对象
    git原理教程
    jsp基础语法_Scriptlet_基本指令
    06_mysql多表查询
    05_mysql单表查询
    04_mysql增删改操作
    03_mysql索引的操作
    01_mysql数据库操作和基本数据类型
    生成器
  • 原文地址:https://www.cnblogs.com/thbCode/p/3593101.html
Copyright © 2011-2022 走看看