实验12 运算符重载_第1页
实验12 运算符重载_第2页
实验12 运算符重载_第3页
实验12 运算符重载_第4页
实验12 运算符重载_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验12 运算符重载(2)牛旭艳 智能二班 20110807201一、实验目的1、进一步理解运算符重载,运用成员函数和友元函数等方法实现运算符的重载。二、实验内容1、重载函数调用运算符(),将以下的二维数组的下标表示方法:chessBoardrowcolumn改为常用的表示方法:chessBoard(row,column)2、重载下标运算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。3、开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。例如:2x4的指数为4,系数为2。请开发一个完整的Polynomial类,包括构造函数、析构函数以及get函数

2、和set函数。该类还要提供下述重载的运算符(分别使用成员函数和友元函数):1)重载加法运算符+,将两个多项式相加;2)重载减法运算符-,将两个多项式相减;3)重载赋值运算符=,将一个多项式赋给另外一个多项式;4)重载乘法算符*,将两个多项式相乘;5)重载加法赋值运算符+=、减法赋值运算符-=以及乘法赋值运算符*=。4设计一个日期类Date,,要求:(1)包含年(year)、月(month)和日(day)私有数据成员。(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符等。提示:由于各C+编译器对于重载输入/出运算符为友元的兼容性都存在问

3、题,最好重载输入/出运算符不声明为成员函数与友元函数,而声明一般函数,为编程更方便,可增加一些成员函数,比如:void SetYear(int y);/ 设置年 int SetMonth(int m);/ 设置月 int SetDay(int d);/ 设置日int GetYear() const;/ 返回年 int GetMonth() const;/ 返回月 int GetDay() const;/ 返回日static int IsLeapyear(int y);/ 判断年份y是否为润年static int GetDays(int y);/ 年份y的天数static int GetDays

4、(const Date &d);/ 日期d当前月份的天数static int DateToNum(const Date &d);/ 返回从公元1年1月1日起的天数static Date NumToDate(int n);/由从公元1年1月1日起的天数返回日期润年条件:年份能被4整除,并且年份不能被100整除,或者年份能被400整除润年天数:366平年天数:365润年2月份天数:29平年2月份天数:285设计一个时间类Time,要求:(1)包含时(hour)、分(minute)和秒(second)私有数据成员。(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时

5、间的减加运算符-、重载输出运算符等。提示:可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。时间转换成秒数:秒数 = 时 * 3600 + 分 * 60 + 秒秒数转换成时间:时 = 秒数 / 3600分 = (秒数 - 时 * 3600) / 60秒 = 秒数 % 60为编程更方便,可增加一些成员函数,比如:void SetHour(int hh);/ 设置小时 void SetMinute(int mm);/ 设置分钟 void SetSecond(int ss);/ 设置秒 int GetHour() const;/ 返回小时 int GetMinute() cons

6、t;/ 返回分钟 int GetSecond() const;/ 返回秒3、 实验程序及结果1、#includeusing namespace std;class chessBoardprivate:int a22;public:chessBoard(int y,int b,int c,int d)a00=y;a01=b;a10=c;a11=d;int & operator()(int b,int c);int & chessBoard:operator()(int b,int c)return abc;int main()chessBoard v(1,2,3,4);v(0,1)=v(1,0)

7、;coutv(0,1)endl;return 0;2、#includeclass xiabiaopublic:xiabiao()/构造函数赋予数组初值for(int i = 0;i 5)jihei =(-1)* 2 * i;elsejihei =i + 3;cout所有元素:= 0;i-)coutjiheit;int & operator(int a)int t;for(int i = 0;i 10;i+)/冒泡排序 大的放前面for(int j = 0;j 9-i;j+)if(jihejjihej+1)t = jihej;jihej = jihej+1;jihej+1 = t;return

8、jihea-1;private:int jihe10;int main()xiabiao xi;cout最大的为:xi1endl;cout第二的为:xi2endl;cout第三的为:xi3endl;return 0;3、#include #include class Polynomialpublic:Polynomial();Polynomial operator+(const Polynomial&)const;Polynomial operator-(const Polynomial&)const;Polynomial operator*(const Polynomial&);Polyno

9、mial& operator+=(const Polynomial&);Polynomial& operator-=(const Polynomial&);Polynomial& operator*=(const Polynomial&);void EnterTerms();/输入函数void PrintPolynomial( )const;/打印函数private:int exponents100;int coefficients100;void polynomialCombine(Polynomial&);/合并同类项;Polynomial:Polynomial()for(int i=0;

10、i100;i+)/置零coefficientsi=0;exponentsi=0;void Polynomial:PrintPolynomial() const/输出函数int start;/输出累加系数bool zero=false;if(coefficients0)/常数存在coutcoefficients0;start=1;zero=true;elseif(coefficients1)coutcoefficients1x;/常量不存在,输出指数为1的项if(exponents1!=0)&(exponents1!=1)coutexponents1;zero=true;start=2;for(

11、int x=start;x100;x+)/输出其他各项if(coefficientsx!=0)coutsetiosflags(ios:showpos)coefficientsxresetiosflags(ios:showpos)x;if(exponentsx!=0)&(exponentsx!=1)coutexponentsx;zero=true;if(!zero)/多项式为空cout0;coutendl;Polynomial Polynomial:operator+(const Polynomial& r) constPolynomial temp;bool exponentExists;te

12、mp.coefficients0=coefficients0+r.coefficients0;/计算常量之和for(int s=1;(s100)&(r.exponentss!=0);s+)temp.coefficientss=r.coefficientss;temp.exponentss=r.exponentss;for(int x=1;x100;x+)/计算其他各项之和exponentExists=false;for(int t=1;(t100)&(!exponentExists);t+)if(exponentsx=temp.exponentst)temp.coefficientst+=co

13、efficientsx;exponentExists=true;if(!exponentExists)temp.exponentss=exponentsx;temp.coefficientss+=coefficientsx;s+;return temp;Polynomial &Polynomial:operator+=(const Polynomial &r)*this=*this+r;return *this;Polynomial Polynomial:operator-(const Polynomial &r)constPolynomial temp;bool exponentExists

14、;temp.coefficients0=coefficients0-r.coefficients0;for(int s=1;(s100)&(exponentss!=0);s+)temp.coefficientss=coefficientss;temp.exponentss=exponentss;for(int x=1;x100;x+)exponentExists=false;for(int t=1;(t100)&(!exponentExists);t+)if(r.exponentsx=temp.exponentst)temp.coefficientst-=r.coefficientsx;exp

15、onentExists=true;if(!exponentExists)temp.exponentss=r.exponentsx;temp.coefficientss-=r.coefficientsx;s+;return temp;Polynomial &Polynomial:operator-=(const Polynomial& r)*this=*this-r;return *this;Polynomial Polynomial:operator*(const Polynomial& r)Polynomial temp;int s=1;for(int x=0;(x100)&(x=0|coe

16、fficientsx!=0);x+)for(int y=0;(y100)&(y=0|r.coefficientsy!=0);y+)if(coefficientsx*r.coefficientsy)if(exponentsx=0)&(r.exponentsy=0)temp.coefficients0+=coefficientsx*r.coefficientsy;elsetemp.coefficientss= coefficientsx*r.coefficientsy;temp.exponentss=exponentsx+r.exponentsy;s+;polynomialCombine(temp

17、);/合并同类项return temp;void Polynomial:polynomialCombine(Polynomial& w)Polynomial temp=w;int exp;for(int x=0;x100;x+)w.coefficientsx=0;w.exponentsx=0;for(x=1;x100;x+)exp=temp.exponentsx;for(int y=x+1;y100;y+)if(exp=temp.exponentsy)temp.coefficientsx+=temp.coefficientsy;temp.exponentsy=0;temp.coefficien

18、tsy=0;w=temp;Polynomial &Polynomial:operator*=(const Polynomial& r)*this=*this*r;return *this;void Polynomial:EnterTerms()/初始函数bool found=false;int numberOfTerms,c,e;coutnumberOfTerms;for(int n=1;n=numberOfTerms;n+)coutc;coute;if(c!=0)if(e=0)/初始置零coefficients0+=c;/常数continue;for(int term=1;(term100)

19、&(coefficientsterm!=0);term+)/找是否阶数相同if(e=exponentsterm)coefficientsterm+=c;exponentsterm=e;found=true;if(!found)/阶数不同 另外储存coefficientsterm+=c;exponentsterm=e;void main()Polynomial a,b,c,t,d;a.EnterTerms();b.EnterTerms();coutendlFirst polynomial is:;a.PrintPolynomial();coutendlSecond polynomial is:;

20、b.PrintPolynomial();coutendlAdding the polynomials yields:;c=a+b;c.PrintPolynomial();coutendl+=the polynomials yields:;t=a;a+=b;a.PrintPolynomial();coutendlSubtracting the polynomials yields:;a=t;c=a-b;c.PrintPolynomial();coutendl-=the polynomials yields:;a-=b;a.PrintPolynomial();coutendlMultiplying

21、 the polynomials yields:;a=t;c=a*b;c.PrintPolynomial();coutendl*=the polynomials yields:;a*=b;a.PrintPolynomial();coutendl;4、#includeiostream.hclass Datepublic:Date(int a=0,int b=0,int c=0);void Set_Date(int a,int b,int c);void Get_Date();Date operator+(int);Date operator-(int);friend ostream& opera

22、tor(istream&, Date&);private:int year,mounth,date,m;Date:Date(int a,int b,int c)year=a;mounth=b;date=c;m=1;void Date:Set_Date(int a,int b,int c)year=a;mounth=b;date=c;void Date:Get_Date()if(m=1)coutyear年mounth月date日endl;elsecout刚才输入的天数不符合要求!28)m=0;return *this;elseif(year%400=0)|(year%4=0)&(year%100

23、!=0)if(mounth=4)|(mounth=6)|(mounth=9)|(mounth=11)if(date+a)=30)date=date+a;elsedate=date+a-30;mounth+;elseif(mounth=2)if(date+a)=29)date=date+a;elsedate=date+a;mounth+;elseif(date+a)=31)date=date+a;elsedate=date+a-31;if(mounth=12)year+;mounth=1;elsemounth+;elseif(mounth=4)|(mounth=6)|(mounth=9)|(mo

24、unth=11)if(date+a)=30)date=date+a;elsedate=date+a-30;mounth+;elseif(mounth=2)if(date+a)=28)date=date+a;elsedate=date+a-28;mounth+;elseif(date+a)28)m=0;return *this;elseif(year%400=0)|(year%4=0)&(year%100!=0)if(mounth=5)|(mounth=7)|(mounth=10)|(mounth=12)if(date=a)date=date-a;elsedate=date-a+30;mount

25、h-;elseif(mounth=3)if(date=a)date=date-a;elsedate=date-a+29;mounth-;elseif(date=a)date=date-a;elsedate=date-a+31;if(mounth=1)year-;mounth=12;elsemounth-;elseif(mounth=5)|(mounth=7)|(mounth=10)|(mounth=12)if(date=a)date=date-a;elsedate=date-a+30;mounth-;elseif(mounth=3)if(date=a)date=date-a;elsedate=

26、date-a+28;mounth-;elseif(date=a)date=date-a;elsedate=date-a+31;if(mounth=1)year-;mounth=12;elsemounth-;return *this;ostream& operator(ostream& output,Date &a)couta.year年a.mounth月a.date日(istream& input,Date &a)couta.year;couta.mounth;couta.date;return input;int main()Date a,b;int x,y,z;cout请输入第一个日期:endl;coutx;couty;coutz;a.Set_Date(x,y,z);cout请输入第二个日期:b;cout请输入需要加上的天数:z;a=a+z;cout日期a加上z天得到的日期为:endl;a.Get_Date();cout请输入需要减去的天数:z;a=a-z;cout日期a减去z天得到的日期为:endl;a.Get_Date();return 0;5、#includeiostream.hclass Timepublic:Time();void Set_Time(int a,int b,int c);void Get_Time();Time operator+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论