高等程序设计实验报告_第1页
高等程序设计实验报告_第2页
免费预览已结束,剩余17页可下载查看

下载本文档

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

文档简介

1、咼等程序设计实验报告实验名称实验12运算符重载(2)系别姓名学号班级实验时间实验地点实验成绩一、实验目的及要求进一步理解运算符重载,运用成员函数和友元函数等方法实现运算符的重载。二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)硬件设备:联网的个人计算机操作系统:Windowsxp编译系统:DevC+三、实验内容及步骤(包含简要的实验步骤流程)1、重载函数调用运算符(),将以下的二维数组的下标表示方法:chessBoardrowcolumn改为常用的表示方法:chessBoard(row,column)2、重载下标运算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。3

2、、开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。例如:2x4的指数为4,系数为2。请开发一个完整的Polynomial类,包括构造函数、析构函数以及"get"函数和"set"函数。该类还要提供下述重载的运算符(分别使用成员函数和友元函数):1)重载加法运算符+,将两个多项式相加;2)重载减法运算符-,将两个多项式相减;3)重载赋值运算符=,将一个多项式赋给另外一个多项式;4)重载乘法算符*,将两个多项式相乘;5)重载加法赋值运算符+二、减法赋值运算符-=以及乘法赋值运算符*=。4设计一个日期类Date,,要求:(

3、1)包含年(year)、月(month)和日(day)私有数据成员。(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符<<与输入运算符>>等。提示:由于各C+编译器对于重载输入/出运算符为友元的兼容性都存在问题,最好重载输入/出运算符不声明为成员函数与友元函数,而声明一般函数,为编程更方便,可增加一些成员函数,比如:voidSetYear(inty);/设置年intSetMonth(intm);/设置月intSetDay(intd);/设置日intGetYear()const;/返回年intGetMonth()

4、const;/返回月intGetDay()const;/返回日staticintlsLeapyear(inty);/判断年份y是否为润年/staticintGetDays(inty);staticintGetDays(constDate&d);/staticintDateToNum(constDate&d);staticDateNumToDate(intn);/年份y的天数日期d当前月份的天数/由从公元1年1月1日起的天数返回日期/返回从公元1年1月1日起的天数润年条件:年份能被4整除,并且年份不能被100整除,或者年份能被400整除润年天数:366平年天数:365润年2月份天

5、数:29平年2月份天数:285.设计一个时间类Time,要求:(1) 包含时(hour)、分(minute)和秒(second)私有数据成员。(2) 包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<<与输入运算符>>等。提示:可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。时间转换成秒数:秒数=时*3600+分*60+秒秒数转换成时间:时=秒数/3600分=(秒数-时*3600)/60秒=秒数%60为编程更方便,可增加一些成员函数,比如:voidSetHour(inthh);/设置小

6、时voidSetMinute(intmm);/设置分钟voidSetSecond(intss);/设置秒intGetHour()const;/返回小时intGetMinute()const;/返回分钟intGetSecond()const;/返回秒四、实验结果(包括程序或图表、结论陈述、数据记录及分析等,可附页)1、重载函数调用运算符(),将以下的二维数组的下标表示方法:chessBoardrowcolumn改为常用的表示方法:chessBoard(row,column)代码实现:#include<iostream>#include<conio.h>usingnames

7、pacestd;classshuzuintchessBoard88;public:shuzu()for(inti=0;i<8;i+)for(intj=0;j<8;j+)chessBoardij=i+j;intoperator()(inta,intb)returnchessBoardab;intmain()shuzua;cout«"输出(6,7)="<<a(6,7)vvendl;cout«"矩阵:"<<endl;for(inti=0;i<8;i+)for(intj=0;j<8;j+)cou

8、t<va(i,j)vv"t"cout«endl;getch();return0;结果截图:2、重载下标运算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。3、开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。例如:2x4的指数为4,系数为2。请开发一个完整的Polynomial类,包括构造函数、析构函数以及"get"函数和"set"函数。该类还要提供下述重载的运算符(分别使用成员函数和友元函数):1重载加法运算符+,将两个多项式相加;2) 重载减法运算符-,将两个多项式相

9、减;3) 重载赋值运算符=,将一个多项式赋给另外一个多项式;4) 重载乘法算符*,将两个多项式相乘;5) 重载加法赋值运算符+=、减法赋值运算符-=以及乘法赋值运算符*=。代码实现:#include<iostream>#include<conio.h>usingnamespacestd;classJprivate:inta;public:J(ints)for(inti=0;i<5;i+)ai=si;voidpaixu()for(inti=0;i<4;i+)for(intj=0;j<4-i;j+)if(aj>aj+1)inttemp=aj;aj=a

10、j+1;aj+1=temp;intoperator(intb)returnab;;intmain()ints5;cout«"请输入5个数:"<<endl;for(inti=0;i<5;i+)cin>>si;Jj(s);j.paixu();coutvv"最大的元素、次最大的元素以及第三大的元素依次为:"vvj4vv","vvj3vv","vvj2vvendl;getch();return0;结果截图:4设计一个日期类Date,,要求:(1) 包含年(year)、月(month)

11、和日(day)私有数据成员。(2) 包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符<<与输入运算符>>等。提示:由于各C+编译器对于重载输入/出运算符为友元的兼容性都存在问题,最好重载输入/出运算符不声明为成员函数与友元函数,函数,比如:voidSetYear(inty);/intSetMonth(intm);/intSetDay(intd);intGetYear()const;/intGetMonth()const;intGetDay()const;/staticintlsLeapyear(inty);stat

12、icintGetDays(inty);staticintGetDays(constDate&d);/staticintDateToNum(constDate&d);staticDateNumToDate(intn);而声明一般函数,为编程更方便,可增加一些成员设置年设置月/设置日返回年/返回月返回日/判断年份y是否为润年/年份y的天数日期d当前月份的天数/返回从公元1年1月1日起的天数/由从公元1年1月1日起的天数返回日期润年条件:年份能被4整除,并且年份不能被100整除,或者年份能被400整除润年天数:366平年天数:365润年2月份天数:29平年2月份天数:28(1)程序实

13、现#include"iostream.h"#include<conio.h>classDatepublic:Date(inta=0,intb=0,intc=0);voidSet_Date(inta,intb,intc);voidGet_Date();Dateoperator+(int);Dateoperator-nt);friendostream&operator<<(ostream&.Date&);friendistream&operator>>(istream&.Date&);priva

14、te:intyear,mounth,date,m;Date:Date(inta,intb,intc)year=a;mounth=b;date=c;m=1;voidDate:Set_Date(inta,intb,intc)_year=a;mounth=b;date=c;voidDate:Get_Date()_if(m=1)coutvvyearvv"年"<<mounth<<"月"<<date<<"日"<<endl;elsecoutvv"刚才输入的天数不符合要求!&quo

15、t;<<endl;DateDate:operator+(inta)if(a>28)m=0;return*this;elseif(year%400=0)|(year%4=0)&&(year%100!=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+;/处理2月else

16、if(date+a)<=31)date=date+a;elsedate=date+a-31;if(mounth=12)year+;mounth=1;elsemounth+;elseif(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)<=28)date=date+a;elsedate=date+a-28;mounth+;elseif(date+a)<=31)date=date

17、+a;elsedate=date+a-31;if(mounth=12)year+;mounth=1;elsemounth+;return*this;DateDate:operator-(inta)if(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;mounth-;elseif(mounth=3)if(date

18、>=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=date-a+28;

19、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)coutvva.yearvv"年"<<a.mounth<<"月"<<a.date<<"日"<<endl;returnoutput;istream&a

20、mp;operator»(istream&input,Date&a)cout«"年:";cin>>a.year;cout«"月:"cin>>a.mounth;cout«"日:"cin>>a.date;returninput;intmain()Datea,b,c;intx,y,z;cout«"请输入第一个日期:"<<endl;cout«"年:"cin>>x;cou

21、t«"月:"cin>>y;cout«"日:"cin>>z;a.Set_Date(x,y,z);c=a;coutvv"请输入第二个日期:"<<endl;cin>>b;coutvv"请输入需要加上的天数:"<<endl;cin>>z;a=a+z;coutvv"日期"v<c<v"加上"<<zvv"天"<<"得到的日期为:&qu

22、ot;<<endl;a. Get_Date();a=c;coutvv"请输入需要减去的天数:"<<endl;cin>>z;coutvv"日期"vvbvv"减去"vvzvv"天"vv"得到的日期为:"vvendl;b=b-z;b. Get_Date();getch();return0;(2)结果截图5.设计一个时间类Time,要求:(1) 包含时(hour)、分(minute)和秒(second)私有数据成员。(2) 包含构造函数,重载关于一时间加上另一时间的加

23、法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<<与输入运算符>>等。提示:可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。时间转换成秒数:秒数=时*3600+分*60+秒秒数转换成时间:时=秒数/3600分=(秒数-时*3600)/60秒=秒数%60为编程更方便,可增加一些成员函数,比如:voidSetHour(inthh);/设置小时voidSetMinute(intmm);/设置分钟voidSetSecond(intss);/设置秒intGetHour()const;/返回小时intGetMinute()const;/返

24、回分钟intGetSecond()const;/返回秒代码实现:#include<iostream>#include<conio.h>usingnamespacestd;classTimeinthour,minute,second,sall;public:Time();Timeoperato叶(Timea);Timeoperator-(Timea);Timeoperator«(Time&a);Timeoperator>>(Time&a);voidSetHour(inthh);/设置小时voidSetMinute(intmm);/设置

25、分钟/设置秒/返回小时voidSetSecond(intss);intGetHour()const;返回分钟返回秒intGetMinute()const;/intGetSecond()const;/intGetSall()const;;Time:Time()second=0;hour=0;minute=0;sall=0;TimeTime:operator+(Timea)Timetemp;temp.sall=sall+a.sall;temp.hour=temp.sall/3600;temp.minute=(temp.sall-3600*temp.hour)/60;temp.second=temp

26、.sall%60;returntemp;TimeTime:operator-(Timea)Timetemp;temp.sall=sall-a.sall;temp.hour=temp.sall/3600;temp.minute=(temp.sall-3600*temp.hour)/60;temp.second=temp.sall%60;returntemp;TimeTime:operator<<(Time&a)minute=a.minute;hour=a.hour;second=a.second;sall=a.sall;return*this;TimeTime:operato

27、r>>(Time&a)a.minute=minute;a.second=second;a.hour=hour;a.sall=sall;returna;voidTime:SetHour(inthh)hour=hh;voidTime:SetMinute(intmm)minute=mm;voidTime:SetSecond(intss)second=ss;sall=3600*hour+60*minute+second;intTime:GetHour()constreturnhour;/设置小时/设置分钟/设置秒/返回小时intTime:GetMinute()constreturn

28、minute;intTime:GetSecond()constreturnsecond;intTime:GetSall()constreturnsail;intmain()Timet1,t2,t3,t4,t5,t6,t7,t8;ints1,s2,h1,h2,m1,m2;cout«"请输入时分秒(1):"cin>>h1»m1»s1;cout«"请输入时分秒(2):"cin>>h2>>m2>>s2;tl.SetHour(hl);tl.SetMinute(m1);tl.Se

29、tSecond(s1);t2.SetHour(h2);t2.SetMinute(m2);t2.SetSecond(s2);cout<<"t1时间为:"v<t1.GetHour()vv""vvtl.GetSecond()<<"秒"<<endl;cout<<"t1时间为:"v<t2.GetHour()vv""<<t2.GetSecond()<<"秒"<<endl;t1»t3;/返回分钟/返回秒时"vvtl.GetMinute()<<"分时"<<t2.GetMinute()<<"分IIt4<<t

温馨提示

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

最新文档

评论

0/150

提交评论