《C++面相对象程序》课程实验报告(I类)实验3函数重载与运算符重载3.1实验目的1.学习函数和操作符重载的使用方法。2.理解函数和运算符重载的作用和意义。3.掌握类运算符和友元运算符重载的定义和使用。4.掌握常用运算符的重载。3.2实验工具与准备工作在开始实验前,应回顾或复习相关内容。需要一台主算机,其中安装有VisualC++6.0、Visualstudio2010等集成开发环境软件。3.3实验内容1.先阅读下列程序,写出执行结果。然后输入程序,调试程序,比较结果的正确性。//文件名:main.cpp#includeiostream//预处理命令usingnamespacestd;//使用标准命名空间std//数组类classArray{private://数据成员:int*elem;//数组元素存储空间intsize;//数组元素个数public://公有函数:Array(inta[],intsz):elem(a),size(sz){}//构造函数intGetSize(){returnsize;}//返回数组元素个数int&operator[](intpos){returnelem[pos-1];}//重载下标运算符[]};intmain(void)//主函数main(void){inta[]={1,2,3,4,5};//定义数组aArrayobj(a,5);//定义数组对象obj[1]=8;//为数组元素赋值for(inti=1;i=obj.GetSize();i++)//依次输出数组各元素之值coutobj[i];//输出第i个元素coutendl;//换行system(PAUSE);//调用库函数system(),输出系统提示信息return0;//返回值0,返回操作系统}程序运行结果正确为:2.程序填空。下面程序主要实现描述复数的类Complex的加法运算符+重载,试完成程序。//文件名:main.cpp#includeiostream//预处理命令usingnamespacestd;//使用标准命名空间std//复数类classComplex{private://数据成员:doublerealPart;//实部doubleimagePart;//虚部public://公有函数:Complex(doublereal=0,doubleimage=0):realPart(real),imagePart(image){}//构造函数doubleGetRealPart()const{returnrealPart;}//返回实部doubleGetImagePart()const{returnimagePart;}//返回虚部Complexoperator+(constComplex&a)const//重载加法运算符+{Complexb;//定义复数对象b.realPart=this-realPart+a.realPart;//和的实部b.imagePart=this-imagePart+a.imagePart;//和的虚部returnb;//返回和}};intmain(void)//主函数main(void){Complexa(1,2),b(2,6),c;//定义复数对象c=a+b;//复数加法运算couta=a.GetRealPart()+a.GetImagePart()iendl;//显示acoutb=b.GetRealPart()+b.GetImagePart()iendl;//显示bcoutc=c.GetRealPart()+c.GetImagePart()iendl;//显示csystem(PAUSE);//调用库函数system(),输出系统提示信息return0;//返回值0,返回操作系统}3.改正下面程序中的错误,使其能正常运行。//文件名:main.cpp//1#includeiostream//预处理命令//2usingnamespacestd;//使用标准命名空间std//3//4//整型类//5classInteger//6{//7private://8//数据成员://9intval;//整数值//10//11public://12//公有函数://13Integer(){val=0;}//无参数的构造函数//14Integer(intv){val=v;}//带参数的构造函数//15voidShow(){coutvalendl;}//显示整数值//16};//17//18intmain(void)//主函数main(void)//19{//20Integera(2),b;//定义整型对象//21a.Show();//显示a//22b.Show();//显示b//23//24system(PAUSE);//调用库函数system(),输出系统提示信息//25return0;//返回值0,返回操作系统//26}//274.设计一个日期类Date,,要求:(1)包含年(year)、月(month)和日(day)私有数据成员。(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符与输入运算符等。源程序如下://文件名:main.cpp#includeiostream//预处理命令usingnamespacestd;//使用标准命名空间std//日期类classDate{private://数据成员:intyear;//年intmonth;//月intday;//日public://公有函数:Date(inty=1,intm=1,intd=1):year(y),month(m),day(d){}//构造函数voidSetYear(inty){year=y;}//设置年voidSetMonth(intm){month=m;}//设置月voidSetDay(intd){day=d;}//设置日intGetYear()const{returnyear;}//返回年intGetMonth()const{returnmonth;}//返回月intGetDay()const{returnday;}//返回日Dateoperator+(intdays);//返回当前日期加上天数后得到的日期Dateoperator-(intdays);//返回当前日期减去天数后得到的日期staticboolIsLeapyear(inty);//判断年份y是否为润年staticintGetYearDays(inty);//年份y的天数staticintGetMonthDays(constDate&d);//日期d当前月份的天数staticintDateToNum(constDate&d);//返回从公元1年1月1日起的天数staticDateNumToDate(intn);//由从公元1年1月1日起的天数返回日期};ostream&operator(ostream&out,constDate&d);//重载输出运算符istream&operator(istream&in,Date&d);//重载输入运算符//日期类及相关函数的实现部分DateDate::operator+(intdays)//返回当前日期加上天数后得到的日期{intn=DateToNum(*this)+days;//从公元1年1月1日起的天数returnNumToDate(n);//返回日期}DateDate::operator-(intdays)//返回当前日期减去天数后得到的日期{intn=DateToNum(*this)-days;//从公元1年1月1日起的天数returnNumToDate(n);//返回日期}boolDate::IsLeapyear(inty)//判断年份y是否为润年{if(y%4==0&&y%100!=0||y%400==0)returntrue;//润年elsereturnfalse;//平年}intDate::GetYearDays(inty)//年份y的天数{if(IsLeapyear(y))return366;//润年有366天elsereturn365;//平年有366天}intDate::GetMonthDays(constDate&d)//日期d当前月份的天数{intn;//天数switch(d.GetMonth()){case1:case3:case5:case7:case8:case10:case12:n=31;//第1,3,5,7,8,10,12月为大月break;case4:case6:case9:case11:n=31;//第4,6,9,11月为小月break;case2:if(IsLeapyear(d.GetYear()))n=29;//润年2月有29天elsen=28;//平年2月有29天}returnn;//返回当前月份的天数}intDate::DateToNum(constDate&d)//返回从公元1年1月1日起的天数{inty,n=0;//年份与天数for(y=1;yd.GetYear();y++)//累加从公元1年到year-1年的天数n+=GetYearDays(y);for(intm=1;md.GetMonth();m++)//累加从公元1月到month-1月的天数n+=GetMonthDays(Date(y,m,1));n+=d.GetDay();//累加当前月过的天数returnn;//返回天数}DateDate::NumToDate(intn)//由从公元1年1月1日起的天数返回日期{inty,m,d,rest=n;//年,月,日和剩余天数for(y=1,rest=n;restGetYearDays(y);y++)//计算年份rest-=GetYearDays(y);for(m=1;restGetMonthDays(Date(y,m,1));m++)//计算月份rest-=GetMonthDays(Date(y,m,1));d=rest;//日returnDate(y,m,d);//返回日期}ostream&operator(ostream&out,constDate&d)//重载输出运算符{outd.GetYear()年d.GetMonth()月d.GetDay()日;//输出年月日returnout;//返回输出流}istream&operator(istream&in,Date&d)//重载输入运算符{intyear,month,day;//年月日cinyearmonthday;//输入年月日d=Date(year,month,day);//转换成日期returnin;//返回输入流}intmain(void)//主函数main(void){Dated(2008,8,18);//定义日期对象cout日期:dendl;//输出日期cout日期+10:d+10endl;//输出日期cout日期-10:d-10endl;//输出日期cout输入日期:;cind;//输出日期cout日期:dendl;//输出日期system(PAUSE);//调用库函数system(),输出系统提示信息return0;//返回值0,返回操作系统}*5.设计一个时间类Time,要求:(1)包含时(hour)、分(minute)和秒(second)私有数据成员。(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符与输入运算符等。3.4实验提示1.在重载下标运算符时,已将关于下标pos的操作重载成elem[pos-1],因此obj[1]
共134篇文档
格式: doc
大小: 87.5 KB
时间: 2020-03-16
本文标题:C++3实验报告
链接地址:https://www.777doc.com/doc-4407705 .html