请教一个关于“复数类”的问题
     这是我写的一个关于复数类的代码,
实现复数的四则运算(+.-.*./)的重载
以及(I/O)输入输出的重载
我的问题出在除号“/”的重载,关于除法的运算输出结果总是0.不知道是否是算法出了问题。
本人新手,不知道问题在哪,请各位高手帮我改改。
#include<iostream.h>
#include<math.h>
class complex{
public:
	complex(double r=0.0,double i=0.0){real=r;imag=i;}//构造函数
	complex operator +(complex c2);//加号重载
	complex operator -(complex c2);//减号重载
	complex operator *(complex c2);//乘号重载
	complex operator /(complex c2);//除号重载
	friend ostream& operator<<(ostream& os,complex& c2); //重载输入输出
        friend istream& operator>>(istream& is,complex& c2);
private:
	double real;
	double imag;
};
complex complex::operator +(complex c2)//实现加号重载
{
	complex c;
	c.real=c2.real+real;
	c.imag=c2.imag+imag;
	return c;
};
complex complex::operator -(complex c2)//实现减号重载
{
	complex c;
	c.real=real-c2.real;
	c.imag=imag-c2.imag;
	return c;
};
complex complex::operator *(complex c2)//实现乘号重载
//(a+bi)*(c+di)=(a*c-b*d)+(c*b+a*d)i
{
	complex c;
	c.imag=c2.real*imag+c2.imag*real;
	c.real=c2.real*real-c2.imag*imag;
	return c;
};
complex complex::operator /(complex c2)//实现除号重载
{	
	complex c;
	double d=c2.real*c2.real+c2.imag*c2.imag;
	c2.imag=imag*c2.real-real*c2.imag;
	c2.real=real*c2.real+imag*c2.imag;	
	return c;
};
ostream& operator<<(ostream& os,complex& c2)//输出重栽
{
    if(c2.imag!=0)
        return os<<c2.real<<((c2.imag>=0.0)?"+":"-")<<fabs(c2.imag)<<"i";
    else
        return os<<c2.real;
};
istream& operator>>(istream& is,complex& c2)//输入重载
{
    cout<<"Enter the real number:";
    cin>>c2.real;
    cout<<"Enter the imaginary number:";
    cin>>c2.imag;
    return is; 	
};
int main()
{
   
   complex c1,c2;
   complex c3=0;
   cin>>c1;
   cin>>c2;
   cout<<"c1="<<c1<<endl;
   cout<<"c2="<<c2<<endl;
   cout<<"c1+c2="<<c1+c2<<endl;
   cout<<"c1-c2="<<c1-c2<<endl;
   cout<<"c1*c2="<<c1*c2<<endl;
   cout<<"c1/c2="<<c1/c2<<endl;
   return 0;
}