zoukankan      html  css  js  c++  java
  • 前缀++ 后缀++ 运算符重载

     

    前缀++ 后缀++ 运算符重载

     分类:
     
     

    下面例子程序中   const Fraction operator ++(int)   中   
      int不过是个哑元(dummy),是永远用不上的   
      它只是用来判断++是prefix   还是   postfix   
      记住,如果有哑元,则是postfix,否则,就是prefix   
      就像其他的一元算法和逻辑运算一样   
      而其实在C++中用到这种哑元的也只有在postfix   ++   和--了

     例子:

    int i=10;
    cout<<i++<<endl;    //i=11;后缀加;先返回后自增;   10
    cout<<++i<<endl;    //i=12;前缀加;先自增后返回;   12

    例:

    #include<iostream>
    using namespace std;

    class Fraction                                           //数类;
    {
     friend ostream& operator<<(ostream& out, const Fraction& x);
    private:
     int den;                                         //加的步进距离,使自加的距离不是1;
     int num;                                         //数(初值);
    public:
     Fraction(int d=1, int n=0):den(d),num(n) {}
     Fraction& operator++()                           //前缀自加重载;(前置版本prefix)
      {
       num+=den;                        //先自增,再返回;
       return *this;
      }
     const Fraction operator ++(int)                  //后缀自加重载;(后置版本postfix)
      {
       Fraction old (*this);            //拷贝构造(对象参数是对象)。先返回,再自增;
       ++(*this);                       //调用的是重载的前置版本;
       return old;
      }
    };

    ostream& operator<<(ostream& out, const Fraction& x)
    {
     out<<x.num<<endl;
     return out;
    }

    int main()
    {
     Fraction b(10,10);
     cout<<b++<<endl;
     cout<<++b<<endl;
     return 0;
    }

    前置版本返回一个引用【Fraction& operator++()】,后置版本返回一个const值【const Fraction operator ++(int)】。

    后置版本是利用前置版本来实现的。节约代码,控制代码有余。

    前置版本的效率高,因为后置版本需要调用前置版本,所有后置版本效率比前置要低。(++i比i++效率高。)

    在后置版本里,人为添加一个参数(int),主要是为了区别前置版本,这个参数不会被使用。

  • 相关阅读:
    老毛桃装系统详解
    Eclipse常用快捷键
    oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)
    java编程中Properties类的具体作用和使用!
    电感、磁珠和0欧电阻
    AXI总线(转)
    NOR Flash的学习
    allegro中如何添加安装孔(注:在PCB图纸中添加)
    转:一个计算机专业毕业的银行员工工作感受
    Allegro中常见的文件格式
  • 原文地址:https://www.cnblogs.com/huninglei/p/5495121.html
Copyright © 2011-2022 走看看