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