题目:
创建复数类complex,其中包含double类型数据成员real和image,分别表示复数的实域和虚域。为complex类重载运算符“+”和“-”,用来实现两个复数的加法和减法运算。要求重载函数是友元函数。
代码实现:
#include <iostream.h>
class Complex
{
public:Complex(){real=0; imag=0;} //默认构造函数Complex(double r, double i){real=r; imag=i;} //构造函数static Complex get1(Complex &, Complex &); //定义静态成员函数get1static Complex get2(Complex &, Complex &); //定义静态成员函数get2void display(); //定义成员函数displayfriend Complex operator+(Complex &c1, Complex &c2)//重载运算符+函数,类的友元函数
{return Complex::get1(c1, c2);
}friend Complex operator-(Complex &c1, Complex &c2)//重载运算符-函数,类的友元函数
{return Complex::get2(c1, c2);
}
private:double real;double imag;
};
//成员函数get1,可以访问Complex类的私有变量
Complex Complex::get1(Complex &c1, Complex &c2)
{return Complex(c1.real+c2.real, c1.imag+c2.imag);
}
//成员函数get2,可以访问Complex类的私有变量
Complex Complex::get2(Complex &c1, Complex &c2)
{return Complex(c1.real-c2.real, c1.imag-c2.imag);
}//display函数
void Complex::display()
{cout<<"("<<real;if (imag>=0) cout<<"+";cout<<imag<<"i)"<<endl;
}
int main()
{Complex c1(2.5, 3), c2(4, -7),c3,c4; //定义Complex类的对象c1,c2,c3,c4c3=c1+c2;c4=c1-c2;c3.display();c4.display();return 0;
}
温馨提示:
大家如果使用VC6编译器可能会报错:fatal error C1001: INTERNAL COMPILER ERROR
解决方法:
将#include 改成 #include<iostream.h>
然后去掉 using namespace std;
编译即可通过!