1.要求:在程序的适当位置填写程序代码,使用友元函数方法实现下列运算符重载:
1) 复数 / 实数(double) 运算;
(2) 复数 == 复数 运算; (结果:int型,1表示“true”,0表示“false”)
(3) 复数 != 复数 运算。(结果:int型,1表示“true”,0表示“false”)
程序代码:
#include <iostream>
using namespace std;
class Complex
{
private:
double real,image; //分别为实部、虚部
public:
Complex(double rel=0, double img=0)
{
real=rel;
image=img;
}
void display() //输出(a+b*i) 、(a-b*i) 、(a)等形式
{
cout<<" ("<<real;
if (image>0)
cout<<"+"<<image<<"*i) "; //虚部为正
else if (image<0)
cout<<image<<"*i) "; //虚部为负
else
cout<<") "; //虚部为,即为实数
}
friend Complex operator -(Complex & c1,Complex & c2);//用友元函数重载
};
//友元函数的定义
Complex operator -(Complex & c1,Complex & c2)
{
Complex temp;
temp.real=c1.real-c2.real;
temp.image=c1.image-c2.image;
return temp;
}
int main()
{
Complex c1(10,9), c2(3,-4),c3;
c3=c1/5;
//输出除的结果
c1.display();
cout<<"/";
cout<<5;
cout<<"=";
c3.display();
cout<<endl;
//输出比较的结果
cout<<"c1==c2 ? 结果:";
cout<<(c1==c2)<<endl;
cout<<"c1!=c2 ? 结果:";
cout<<(c1!=c2)<<endl;
return 0;
}
2.能否不调用display()成员函数,而是采用cout<<…<<…<<…方式连续输出Complex呢?
这个算是简单的作业了,你完全可以参考已有的,写要求的,简单的参考
在类中的声明
friend Complex operator /(Complex & c1,int x);
friend bool operator ==(Complex & c1,Complex & c2);
friend bool operator !=(Complex & c1,Complex & c2);
定义为
Complex operator /(Complex & c1,int x)
{
Complex temp;
temp.real=c1.real/x;
temp.image=c1.image/x;
return temp;
}
bool operator ==(Complex & c1,Complex & c2)
{
return (c1.real==c2.real) && (c1.image==c2.image);
}
bool operator !=(Complex & c1,Complex & c2)
{
return (c1.real!=c2.real) || (c1.image!=c2.image);
}
而采用cout<<…<<…<<…方式,任何教材上都有的,你参考下自己先写下