当前位置:文档之家› 实验十六运算符重载解读

实验十六运算符重载解读

实验十六运算符重载
一、实验目的
1、理解运算符重载作用和意义;
2、掌握类运算符和友元运算符重载的定义和使用;
3、掌握常用运算符(++、--、+、-、*、/、=、+=、-=、*=、/=、<<(插入)、>>(提取))的重载。

二、实验内容
1、下列程序定义了一个复数类,重载"+"运算符以实现复数的加法运算。

#include<iostream.h>
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<<Real;
if(Image>=0) cout<<"\t+"; else cout<<"\t";
cout<<Image<<"i\n";
}
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型②分数的运算结果应为最简分数。

相关主题