将运算符重载为友元函数时出了一些莫名其妙的错误
我构建了一个复数类Complex,并且重载了+,-,*,/与<<,>>为友元函数
可编译时的错误让我感觉莫名其妙啊!请大哥大姐们一定要帮帮我,我实在是对
此无能为力了,麻烦大家了.
程序如下:
//头文件
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex
{
private:
double real;
double imag;
public:
Complex() : real(0),imag(0) {}
Complex(double thereal,double theimag) {real=thereal;imag=theimag; }
void setReal(double newreal) {real=newreal; }
void setimag(double newimag) {imag=newimag;}
double getReal() {return real;}
double getImag() {return imag;}
friend Complex operator +(const Complex& z1,const Complex& z2);
friend Complex operator -(const Complex& z1,const Complex& z2);
friend Complex operator *(const Complex& z1,const Complex& z2);
friend Complex operator /(const Complex& z1,const Complex& z2);
friend ostream& operator <<(ostream& out,const Complex& z);
friend istream& operator >>(istream& in,Complex& z);
};
#endif
//类的实现文件
#include "Complex.h"
Complex operator +(const Complex& z1,const Complex& z2)
{
Complex z;
z.real=z1.real+z2.real;
z.imag=z1.imag+z2.imag;
return z;
}
Complex operator -(const Complex& z1,const Complex& z2)
{
Complex z;
z.real=z1.real-z2.real;
z.imag=z1.imag-z2.imag;
return z;
}
Complex operator *(const Complex& z1,const Complex& z2)
{
Complex z;
z.real=z1.real*z2.real-z1.imag*z2.imag;
z.imag=z1.real*z2.imag+z1.imag*z2.real;
return z;
}
Complex operator /(const Complex& z1,const Complex& z2)
{
Complex z;
double m;
m=z2.real*z2.real +z2.imag*z2.imag ;
z.real=(z1.real*z2.real +z1.imag *z2.imag)/m ;
z.imag=(z1.imag*z2.real -z1.real *z2.imag )/m;
return z;
}
ostream& Complex::operator <<(ostream& out,const Complex& z)
{
if(z.imag >0)
cout<<z.real <<"+"<<z.imag <<"i"<<endl;
else if(z.imag <0)
cout<<z.real <<"-"<<z.imag <<"i"<<endl;
else
cout<<z.real <<endl;
return out;
}
istream& Complex::operator >>(istream& in,Complex& z)
{
double n1,n2;
char sign1,sign2;
in>>n1>>sign1>>n2>>sign2;
while(sign2!='i')
{
cout<<"输入错误,请重新输入:"<<endl;
in>>n1>>sign1>>n2>>sign2;
}
z.real =n1;
z.imag =n2;
if(n2<0)
z.imag =-z.imag ;
return in;
}
//测试类的main()函数
#include <iostream>
#include "Complex.h"
#include "Comlex.cpp"
using namespace std;
void main()
{
Complex x,y;
cout<<"输入复数x:";
cin>>x;
cout<<"\n输入复数y:";
cin>>y;
Complex add,sub,div,mul;
add=x+y;
sub=x-y;
div=x*y;
mul=x/y;
cout<<"\nX与Y的和为:"<<add;
cout<<"\nX与Y的差为:"<<sub;
cout<<"\nX与Y的积为:"<<mul;
cout<<"\nX与Y的商为:"<<div;
cout<<"End of testn complex!!!"<<endl;
}