各种操作符的重载

#include "Complex.h"

// 求平方宏
#define SQUARE(__X__) ((__X__) * (__X__))

// 默认构造函数
CComplex::CComplex (void)
 : _dReal (0.f)
 , _dImage (0.f)
{
 cout << "Default Ctor Called." << endl;
}

// 重载的构造函数
CComplex::CComplex (double dReal, double dImage /*= 0.f*/)
 : _dReal (dReal)
 , _dImage (dImage)
{
 cout << "Overloaded Ctor Called." << endl;
}

// 拷贝构造函数
CComplex::CComplex (const CComplex &other)
{
 _dReal = other._dReal;
 _dImage = other._dImage;
 cout << "Copy Ctor Called." << endl;
}

// 析构函数
CComplex::~CComplex (void)
{
}

// = 运算符重载
CComplex CComplex::operator= (const CComplex &B)
{
 this->_dReal = B._dReal;
 this->_dImage = B._dImage;
 cout << "CComplex::operator= () Called." << endl;
 return *this;
}

// + 运算符重载
CComplex CComplex::operator+ (const CComplex &B)
{
 CComplex ret;
 ret._dReal = this->_dReal + B._dReal;
 ret._dImage = this->_dImage + B._dImage;
 return ret;
}

// - 运算符重载
CComplex CComplex::operator- (const CComplex &B)
{
 CComplex ret;
 ret._dReal = this->_dReal - B._dReal;
 ret._dImage = this->_dImage - B._dImage;
 return ret;
}

// 前++ 运算符重载
CComplex CComplex::operator++ (void)
{
 ++this->_dReal;
 return *this;
}

// 前-- 运算符重载
CComplex CComplex::operator-- (void)
{
 --this->_dReal;
 return *this;
}

// * 运算符重载
CComplex operator* (const CComplex &A, const CComplex &B)
{
 CComplex ret;
 ret._dReal = A._dReal * B._dReal - A._dImage * B._dImage;
 ret._dImage = A._dReal * B._dImage + A._dImage * B._dReal;
 return ret;
}

// / 运算符重载
CComplex operator/ (const CComplex &A, const CComplex &B)
{
 CComplex ret;
 // 分母的值,有理化后
 double denom = SQUARE (B._dReal) + SQUARE (B._dImage);
 if (fabs (denom) < 1E-6) {
  throw "不能除以0.";
 }
 ret._dReal = (A._dReal * B._dReal + A._dImage * B._dImage) / denom;
 ret._dImage = (-A._dReal * B._dImage + A._dImage * B._dReal) / denom;
 return ret;
}

// 后++ 运算符重载
CComplex operator++ (CComplex &complex, int)
{
 CComplex ret = complex;
 complex._dReal++;
 return ret;
}

// 后-- 运算符重载
CComplex operator-- (CComplex &complex, int)
{
 CComplex ret = complex;
 complex._dReal--;
 return ret;
}

// 输入流 >> 运算符重载
istream& operator>> (istream &in, CComplex &complex)
{
 cout << "Input Real Part:";
 in >> complex._dReal;
 cout << "Input Image Part:";
 in >> complex._dImage;
 return in;
}

// 输出流 << 运算符重载
ostream& operator<< (ostream &out, const CComplex &complex)
{
 // 如果实部不为0或者实部虚部都为0,输出
 if (fabs (complex._dReal) > 1E-6 || fabs (complex._dImage) < 1E-6)
 {
  out << complex._dReal;
 }
 // 如果虚部为0,不输出
 if (fabs (complex._dImage) > 1E-6)
 {
  out << (complex._dImage > 0 ? "+" : "-");
  // 如果虚部为正负1,不显示
  if (fabs (fabs (complex._dImage) - 1) > 1E-6)
  {
   out << fabs (complex._dImage);
  }
  out << "i";
 }
 return out;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值