实验十六运算符重载解读
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十六运算符重载
一、实验目的
1、理解运算符重载作用和意义;
2、掌握类运算符和友元运算符重载的定义和使用;
3、掌握常用运算符(++、--、+、-、*、/、=、+=、-=、*=、/=、<<(插入)、>>(提取))的重载。
二、实验内容
1、下列程序定义了一个复数类,重载"+"运算符以实现复数的加法运算。
#include
class Complex{
float Real,Image; //复数的实部和虚部
public:
Complex(float r=0,float i=0) //初始化对象
{ Real=r,Image=i; }
float& AccessR() //存取实部
{ return Real; }
float& AccessI() //存取虚部
{ return Image; }
void Show() //显示复数
{ cout< if(Image>=0) cout<<"\t+"; else cout<<"\t"; cout< } Complex operator+(Complex&); //重载"+",实现:复数+复数 Complex operator+(float); //重载"+",实现:复数+实数 Complex& operator+=(Complex&); //重载"+=",实现:复数+=复数 Complex& operator=(Complex&); //重载"=" }; Complex Complex::operator+(Complex&c)//问1.返回值类型能否为Complex&,为什么? { Complex t; t.Real =Real //当前对象之数据成员,即第一操作数之数据成员+c.Real; //第二操作数之数据成员 t.Image =Image+c.Image; return t; } Complex Complex::operator+(float s) { Complex t; t.Real =Real+s; t.Image =Image; return t; } Complex& Complex::operator+=(Complex&c)//问2.返回值类型为void有何不足? { Real+=c.Real; Image+=c.Image; return *this; } Complex& Complex::operator=(Complex&c) //问3.此函数可否省略,为什么? { Real=c.Real; Image=c.Image; return *this; } void main(void) { Complex c1(25,50),c2,c3(100,200),c4(200,400),c; c1.Show(); c2=c1; //等价于c2.operator=(c1); c2.Show(); c=c1+c3; c.Show(); c+=c1; c.Show(); //问4.可否实现c+=20;?若不能如何改进类Complex? c4+=c1+c2; c4.Show(); c4=c4+200; c4.Show(); //问5.可否实现c4=200+c4;?若不能如何改进类Complex? } 首先回答上述程序中的问题,然后为上述程序中的复数类定义比较完善的操作(至少包括:+、-、*、/、取负、+=、!=、==),并作必要的测试。 2、定义描述平面上一个点的类Point,重载++和—运算符,并区分这两个运算符的前置和后置运算。并作必要的测试。 三、选做题 定义分数类,使其具有完善的操作。要求:①分数的分子和分母采用int型②分数的运算结果应为最简分数。