C++3实验报告文档格式.docx
- 文档编号:7859470
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:19
- 大小:23.42KB
C++3实验报告文档格式.docx
《C++3实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《C++3实验报告文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
}//重载下标运算符[]
};
intmain(void)//主函数main(void)
inta[]={1,2,3,4,5};
//定义数组a
Arrayobj(a,5);
//定义数组对象
obj[1]=8;
//为数组元素赋值
for(inti=1;
i<
=obj.GetSize();
i++)//依次输出数组各元素之值
cout<
<
obj[i]<
"
;
//输出第i个元素
cout<
endl;
//换行
system("
PAUSE"
);
//调用库函数system(),输出系统提示信息
return0;
//返回值0,返回操作系统
}
程序运行结果正确为:
2.程序填空。
下面程序主要实现描述复数的类Complex的加法运算符+重载,试完成程序。
//预处理命令
//使用标准命名空间std
//复数类
classComplex
doublerealPart;
//实部
doubleimagePart;
//虚部
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;
//复数加法运算
a="
<
a.GetRealPart()<
+"
a.GetImagePart()<
i"
//显示a
b="
b.GetRealPart()<
b.GetImagePart()<
//显示b
c="
c.GetRealPart()<
c.GetImagePart()<
//显示c
//调用库函数system(),输出系统提示信息
//返回值0,返回操作系统
3.改正下面程序中的错误,使其能正常运行。
main.cpp//1
//预处理命令//2
//使用标准命名空间std//3
//4
//整型类//5
classInteger//6
{//7
//8
//9
intval;
//整数值//10
//11
//12
//13
Integer(){val=0;
}//无参数的构造函数//14
Integer(intv){val=v;
}//带参数的构造函数//15
voidShow(){cout<
val<
}//显示整数值//16
//17
//18
intmain(void)//主函数main(void)//19
{//20
Integera
(2),b;
//定义整型对象//21
a.Show();
//显示a//22
b.Show();
//显示b//23
//24
//调用库函数system(),输出系统提示信息//25
//返回值0,返回操作系统//26
}//27
4.设计一个日期类Date,,要求:
(1)包含年(year)、月(month)和日(day)私有数据成员。
(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符<
与输入运算符>
>
等。
源程序如下:
//日期类
classDate
intyear;
//年
intmonth;
//月
intday;
//日
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&
//返回从公元1年1月1日起的天数
staticDateNumToDate(intn);
//由从公元1年1月1日起的天数返回日期
ostream&
operator<
(ostream&
out,constDate&
//重载输出运算符
istream&
operator>
(istream&
in,Date&
//重载输入运算符>
//日期类及相关函数的实现部分
DateDate:
:
operator+(intdays)//返回当前日期加上天数后得到的日期
intn=DateToNum(*this)+days;
//从公元1年1月1日起的天数
returnNumToDate(n);
//返回日期
operator-(intdays)//返回当前日期减去天数后得到的日期
intn=DateToNum(*this)-days;
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天
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:
//第4,6,9,11月为小月
case2:
if(IsLeapyear(d.GetYear()))n=29;
//润年2月有29天
elsen=28;
//平年2月有29天
returnn;
//返回当前月份的天数
DateToNum(constDate&
d)//返回从公元1年1月1日起的天数
inty,n=0;
//年份与天数
for(y=1;
y<
d.GetYear();
y++)//累加从公元1年到year-1年的天数
n+=GetYearDays(y);
for(intm=1;
m<
d.GetMonth();
m++)//累加从公元1月到month-1月的天数
n+=GetMonthDays(Date(y,m,1));
n+=d.GetDay();
//累加当前月过的天数
//返回天数
NumToDate(intn)//由从公元1年1月1日起的天数返回日期
inty,m,d,rest=n;
//年,月,日和剩余天数
for(y=1,rest=n;
rest>
GetYearDays(y);
y++)//计算年份
rest-=GetYearDays(y);
for(m=1;
GetMonthDays(Date(y,m,1));
m++)//计算月份
rest-=GetMonthDays(Date(y,m,1));
d=rest;
//日
returnDate(y,m,d);
d)//重载输出运算符
{
out<
d.GetYear()<
年"
d.GetMonth()<
月"
d.GetDay()<
日"
//输出年月日
returnout;
//返回输出流
d)//重载输入运算符>
intyear,month,day;
//年月日
cin>
year>
month>
day;
//输入年月日
d=Date(year,month,day);
//转换成日期
returnin;
//返回输入流
intmain(void)//主函数main(void)
Dated(2008,8,18);
//定义日期对象
日期:
"
d<
//输出日期
日期+10:
d+10<
//输出日期
日期-10:
d-10<
输入日期:
d;
//输出日期
//调用库函数system(),输出系统提示信息
//返回值0,返回操作系统
*5.设计一个时间类Time,要求:
(1)包含时(hour)、分(minute)和秒(second)私有数据成员。
(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<
3.4实验提示
1.在重载下标运算符时,已将关于下标pos的操作重载成elem[pos-1],因此obj[1],obj[2],…,依次对应于elem[0],elem[1],…。
2.复数相加的结果也应为复数,所以[1]应填Complex,程序中b表示和,应为返回值,所以[2]应填写b,参考答案为:
[1]Complex[2]b
3.在定义整型对象b时,没有提供初始值,可使用无参数的构造函数,也可使用带参数的构造函数的缺省参数值0来构造整型对象,这样便产生了二义性,可去掉无参数的构造函数(去掉第14行),或去掉带参数的构造函数中的缺省值(去掉第15行中的“=0”)。
4.由于各C++编译器对于重载输入/出运算符为友元的兼容性都存在问题,最好重载输入/出运算符不声明为成员函数与友元函数,而声明一般函数,为编序更方便,可增加一些成员函数,比如:
voidSetYear(inty);
}//设置年
intSetMonth(intm);
//设置月
intSetDay(intd);
//设置日
intGetYear()const;
//返回年
intGetMonth()const;
//返回月
intGetDay()const;
//返回日
staticintIsLeapyear(inty);
staticintGetDays(inty);
staticintGetDays(constDate&
staticintDateToNum(constDate&
//返回从公元1年1月1日起的天数
staticDateNumToDate(intn);
//由从公元1年1月1日起的天数返回日期
润年条件:
年份能被4整除,并且年份不能被100整除,或者年份能被400整除
润年天数:
366
平年天数:
365
润年2月份天数:
29
平年2月份天数:
28
5.可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。
时间转换成秒数:
秒数=时*3600+分*60+秒
秒数转换成时间:
时=秒数/3600
分=(秒数-时*3600)/60
秒=秒数%60
为编序更方便,可增加一些成员函数,比如:
voidSetHour(inthh);
//设置小时
voidSetMinute(intmm);
//设置分钟
voidSetSecond(intss);
//设置秒
intGetHour()const;
//返回小时
intGetMinute()const;
//返回分钟
intGetSecond()const;
//返回秒
3.5实验步骤
以实验内容第4题为例说明实验步骤。
具体实现步骤如下:
1.建立工程exp4_4。
2.建立源程序文件main.cpp,具体内容如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验 报告