前綴++ 後綴++ 運算符重載

下面例子程序中   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),主要是爲了區別前置版本,這個參數不會被使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章