实验十六运算符重载解读

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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型②分数的运算结果应为最简分数。

相关文档
最新文档