在標準C++中,實際上是不提供對複數類型遞增與遞減操作符的支援,複數包含實數與虛數兩部分。我通過重載了複數的操作符來實現遞增與遞減操作。
遞增與遞減操作都是針對複數的實部來實現的。比如complex<double> cval; cval++只是針對複數實部加1.
下面是我的詳細實現:
先看看前置操作符的實現形式,是通過引用來進行的,非常簡單。
#include "stdafx.h"
#include <complex>
using namespace std;
inline complex<double>& operator++(complex<double> &val)
{
return val+=complex<double>(1);
}
後置操作符的形式與前置類似,為了與前置操作符區分,加了另外一個參數,int類型的,這隻是一個額外參數,沒什麼其它的意義,與前置操作符不同的是,函數的傳回值是以傳值的方式進行的,而不是以引用的方式傳遞,只是簡單返回原值。
#include "stdafx.h"
#include <complex>
using namespace std;
inline complex<double> operator++(complex<double>&val,int i)
{
complex<double> oldval = val;
val += complex<double>(1);
return oldval;
}
這兩種實現方式非常簡單,下面我通過測試程式進行測試:
#include "stdafx.h"
#include <iostream>
#include <complex>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
complex<double> cval(4.0,1.0);
cout << "before increment:" <<cval<<endl;
cout << "after increment++:" <<cval++ <<endl;
cout <<"after ++increment:" << ++cval <<endl;
cout << "after increment--:" <<cval-- <<endl;
cout <<"after --increment:" << --cval <<endl;
//wait input
int exit;
cin >> exit;
return 0;
}
遞減操作符我就不多講了,都差不多!忘了今天是Christmas, 對自己說聲:Merry Christmas!