Complex0.h
#ifndef COMPLEX0_H_
#define COMPlEX0_H_
#include <iostream>
#include <cmath> //for sqrt()
class Complex
{
private:
double real; //store the real part of a complex number
double imagin; //store the imaginary part of a complex number
double modulus; //store the modulus of a complex number
void set_modulus() {modulus=sqrt(real*real+imagin*imagin);}
public:
Complex(double re=0.0, double im=0.0);
~Complex();
Complex conjugate() const;
Complex operator+(const Complex & co) const;
Complex operator-(const Complex & co) const;
Complex operator*(const Complex & co) const;
Complex operator*(double mul) const;
friend Complex operator*(double mul, const Complex & co);
friend std::ostream & operator<<(std::ostream & os, const Complex & co);
friend std::istream & operator>>(std::istream & is, Complex & co);
};
#endif
Complex0.cpp
#include "Complex0.h"
Complex::Complex(double re, double im)
{
real=re;
imagin=im;
set_modulus();
}
Complex::~Complex()
{
}
Complex Complex::conjugate() const
{
Complex temp(real, -imagin);
return temp;
}
Complex Complex::operator+(const Complex & co) const
{
Complex temp(real+co.real, imagin+co.imagin);
return temp;
}
Complex Complex::operator-(const Complex & co) const
{
Complex temp(real-co.real, imagin-co.imagin);
return temp;
}
Complex Complex::operator*(const Complex & co) const
{
Complex temp(real*co.real-imagin*co.imagin, real*co.imagin+imagin*co.real);
return temp;
}
Complex Complex::operator*(double mul) const
{
Complex temp(real*mul, imagin*mul);
return temp;
}
Complex operator*(double mul, const Complex & co)
{
return co*mul;
}
std::ostream & operator<<(std::ostream & os, const Complex & co)
{
os<<"("<<co.real<<","<<co.imagin<<"i)";
return os;
}
std::istream & operator>>(std::istream & is, Complex & co)
//注意这里不能写成const Complex & co,因为输入就是要修改对象的值的
{
std::cout<<"real: ";
if(is>>co.real) //如果输入为q则停止输入
{
std::cout<<"imaginary: ";
is>>co.imagin;
}
return is;
}
useComplex0.cpp
#include "Complex0.h"
int main(void)
{
using namespace std;
Complex a(3.0, 4.0);
Complex c;
cout<<"Enter a complex number(q to quit):\n";
while(cin>>c)
{
cout<<"c is "<<c<<endl;
cout<<"complex conjugate is "<<c.conjugate()<<endl;
cout<<"a is "<<a<<endl;
cout<<"a + c is "<<a+c<<endl;
cout<<"a - c is "<<a-c<<endl;
cout<<"a * c is "<<a*c<<endl;
cout<<"2 * c is "<<2*c<<endl;
cout<<"Enter a complex number(q to quit):\n";
}
cout<<"Done!\n";
return 0;
}