在这里实现复数类运算符的重载,网上比较少的是对cout cin的重载,以及数学运算*,/,一下是我实现的声明:
Complex.h:
#ifndef __COMPLEX__ 
#define __COMPLEX__ 
#include <iostream> 
using namespace std; 
class Complex 
{ 
public: 
friend ostream & operator << (ostream& out, const Complex& num)//重载cout,cin,课一直接调 
{                                                              //用>>、<<运算符进行输入输 
if (num._imgic<0.0)                                            //出,我把定义友元的重载写 
{                                                              //到了头文件里 
out << num._real << " - " << -(num._imgic) << "i"; 
} 
else
{ 
out << num._real << " + " << num._imgic << "i"; 
} 
return out; 
} 
friend istream & operator>> (istream& in, Complex& num) 
{ 
in >> num._real; 
in >> num._imgic; 
return in; 
} 
Complex(double real = 0, double imgic = 0) 
:_real(real) 
, _imgic(imgic) 
{ 
} 
~Complex() 
{ 
} 
bool operator >(const Complex & num); 
bool operator <(const Complex & num); 
bool operator ==(const Complex & num); 
bool operator >=(const Complex & num); 
bool operator <=(const Complex & num); 
bool operator !=(const Complex & num); 
Complex operator + (const Complex & num);//算数运算符的重载 
Complex operator - (const Complex & num); 
Complex operator ++ ();//前置++、--,后置++、--在这里我全部实现为+、-实部 
Complex operator ++ (int);//对虚部不做运算 
Complex operator -- (); 
Complex operator -- (int); 
Complex operator += (const Complex & num); 
Complex operator -= (const Complex & num); 
Complex operator * (const Complex & num);//乘、除运算的实现 
Complex operator *= (const Complex & num);//若实现 / 运算功能,我们必须先实现~(共轭) 
Complex operator /  (Complex & num); 
Complex operator /= (Complex & num); 
Complex operator ~ ();//共轭运算符的实现 
private: 
double _real; 
double _imgic; 
}; 
#endif
实现代码如下,Complex.cpp:
#include "Complex.h" 
bool Complex:: operator >(const Complex & num) 
{ 
if ((_real*_real + _imgic*_imgic) > 
(num._real*num._real + num._imgic*num._imgic)) 
return true; 
return false; 
} 
bool Complex:: operator <(const Complex & num) 
{ 
return !(*this >= num); 
} 
bool Complex:: operator ==(const Complex & num) 
{ 
if ((_real == num._real) && 
(_imgic == num._imgic)) 
return true; 
return false; 
} 
bool Complex:: operator != (const Complex & num) 
{ 
return !(*this == num); 
} 
bool Complex:: operator >=(const Complex & num) 
{ 
return (*this > num) || (*this == num); 
} 
bool Complex:: operator <=(const Complex & num) 
{ 
return !(*this > num); 
} 
Complex Complex:: operator + (const Complex & num) 
{ 
return Complex(_real + num._real, _imgic + num._imgic); 
} 
Complex Complex:: operator - (const Complex & num) 
{ 
return Complex(_real - num._real, _imgic - num._imgic); 
} 
Complex Complex:: operator ++ () 
{ 
_real++; 
return *this; 
} 
Complex Complex:: operator ++ (int) 
{ 
Complex ret = *this; 
_real++; 
return *this; 
} 
Complex Complex:: operator -- () 
{ 
_real--; 
return *this; 
} 
Complex Complex:: operator -- (int) 
{ 
Complex ret = *this; 
_real--; 
return *this; 
} 
Complex Complex:: operator += (const Complex & num) 
{ 
_real += num._real; 
_imgic += num._imgic; 
return *this; 
} 
Complex Complex:: operator -= (const Complex & num) 
{ 
_real -= num._real; 
_imgic -= num._imgic; 
return *this; 
} 
Complex Complex:: operator * (const Complex & num) 
{ 
return Complex((_real*num._real - _imgic*num._imgic), 
(_real*num._imgic + (num._imgic*_real))); 
} 
Complex Complex:: operator *= (const Complex & num) 
{ 
return*this = *this*num; 
} 
Complex Complex:: operator / (Complex & num) 
{ 
return Complex(((*this*(~num))._real) / ((num*(~num))._real), 
((*this*(~num))._imgic) / ((num*(~num))._real)); 
} 
Complex Complex:: operator /= (Complex & num) 
{ 
Complex ret = *this / num; 
return ret; 
} 
Complex Complex:: operator ~ () 
{ 
return Complex(_real, -_imgic); 
}
如有不足希望指正,有疑惑希望留言一起探讨

