实验目的和要求
熟悉运算符重载的定义和使用方法
实验内容
1.调试下列程序
- //sy7_1.cpp
- #include<iostream>
- using namespace std;
- class complex
- {
- public:
- complex(){real=imag=0.0;}
- complex(double r){real=r;imag=0.0;}
- complex(double r,double i){real=r;imag=i;}
- complex operator + (const complex &c);
- complex operator - (const complex &c);
- complex operator * (const complex &c);
- complex operator / (const complex &c);
- friend void print(const complex &c);
- private:
- double real,imag;
- };
- inline complex complex::operator + (const complex &c)
- {
- return complex(real+c.real,imag+c.imag);
- }
- inline complex complex::operator - (const complex &c)
- {
- return complex(real-c.real,imag-c.imag);
- }
- inline complex complex::operator * (const complex &c)
- {
- return complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
- }
- inline complex complex::operator / (const complex &c)
- {
- return complex((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag));
- }
- void print(const complex &c)
- {
- if(c.imag<0)
- cout<<c.real<<c.imag<<"i";
- else
- cout<<c.real<<"+"<<c.imag<<"i";
- }
- int main()
- {
- complex c1(2.0),c2(3.0,-1.0),c3;
- c3=c1+c2;
- cout<<"\nc1+c2= ";
- print(c3);
- c3=c1-c2;
- cout<<"\nc1-c2= ";
- print(c3);
- c3=c1*c2;
- cout<<"\nc1*c2= ";
- print(c3);
- c3=c1/c2;
- cout<<"\nc1/c2= ";
- print(c3);
- c3=(c1+c2)*(c1-c2)*c2/c1;
- cout<<"\n(c1+c2)*(c1-c2)*c2/c1= ";
- print(c3);
- cout<<endl;
- return 0;
- }
写出程序的输出结果,并解释
实验结果如下:
2.调试下列程序
- //sy7_2.cpp
- #include<iostream>
- using namespace std;
- class complex
- {
- public:
- complex(){real=imag=0.0;}
- complex(double r){real=r;imag=0.0;}
- complex(double r,double i){real=r;imag=i;}
- friend complex operator + (const complex &c1,const complex &c2);
- friend complex operator - (const complex &c1,const complex &c2);
- friend complex operator * (const complex &c1,const complex &c2);
- friend complex operator / (const complex &c1,const complex &c2);
- friend void print(const complex &c);
- private:
- double real,imag;
- };
- complex operator + (const complex &c1,const complex &c2)
- {
- return complex(c1.real+c2.real,c1.imag+c2.imag);
- }
- complex operator - (const complex &c1,const complex &c2)
- {
- return complex(c1.real-c2.real,c1.imag-c2.imag);
- }
- complex operator * (const complex &c1,const complex &c2)
- {
- return complex(c1.real*c2.real-c1.imag*c2.imag,c1.real*c2.imag+c1.imag*c2.real);
- }
- complex operator / (const complex &c1,const complex &c2)
- {
- return complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));
- }
- void print(const complex &c)
- {
- if(c.imag<0)
- cout<<c.real<<c.imag<<"i";
- else
- cout<<c.real<<"+"<<c.imag<<"i";
- }
- int main()
- {
- complex c1(2.0),c2(3.0,-1.0),c3;
- c3=c1+c2;
- cout<<"\nc1+c2= ";
- print(c3);
- c3=c1-c2;
- cout<<"\nc1-c2= ";
- print(c3);
- c3=c1*c2;
- cout<<"\nc1*c2= ";
- print(c3);
- c3=c1/c2;
- cout<<"\nc1/c2= ";
- print(c3);
- c3=(c1+c2)*(c1-c2)*c2/c1;
- cout<<"\n(c1+c2)*(c1-c2)*c2/c1= ";
- print(c3);
- cout<<endl;
- return 0;
- }
写出程序的输出的结果,并解释。
程序结果如下;
3.定义一个Time类用来保存时间(时、分、秒),通过重载操作符“+”实现两个时间的相加(sy7-3.cpp)
分析与讨论
结合上题中的程序总结运算符重载的形式。