c++实验报告 类的组合及应用.docx
《c++实验报告 类的组合及应用.docx》由会员分享,可在线阅读,更多相关《c++实验报告 类的组合及应用.docx(11页珍藏版)》请在冰豆网上搜索。
c++实验报告类的组合及应用
c++实验报告类的组合及应用
————————————————————————————————作者:
————————————————————————————————日期:
昆明理工大学信息工程与自动化学院学生实验报告
(201-201学年第二学期)
课程名称:
C++程序设计开课实验室:
年月日
年级
学号
姓名
成绩
实验项目名称
类的组合及应用
指导教师
教师评语
教师签名:
年月日
题目1:
在cdate类中增加日期相加和相减的功能,如:
在日期上加上XX天,得到一个新日期;
实现两个日期相减,两个日期之间相距多少天;
日期减去XX天后是什么日期。
源程序1
/******cdate.h******/
#ifndefCDATE
#defineCDATE
//class1
classcdate
{
public:
cdate(){year=1900;month=1;day=1;};//初始化
cdate(intyear_get,intmonth_get,intday_get);//赋值
voidnext();
voidset();
voiddisplay();
intget_year();
intget_month();
intget_day();
voiddate_count_date();
//private:
intyear,month,day,d,other;
};//类定义
//class2继承class1
classcdate_count:
publiccdate
{
public:
//cdate_count();
intcount(inty,intm,intd1);
intget_year_number(intw,inti);
intget_month_number(intx,intj);
intget_day_number(inty,intk);
voiddisplay();
voidset_today();
private:
inty,m,d1,cha;
intyear_today,month_today,day_today;
};
#endif
/******cdate.cpp******/
#include"cdate2。
h"
#include#include〈iomanip>
usingnamespacestd;
cdate:
:
cdate(intyear_get,intmonth_get,intday_get)
{
year=year_get;
month=month_get;
day=day_get;
}//赋值
voidcdate:
:
next()
{
day+=1;
}//加一
voidcdate:
:
set()
{
cout〈<"pleaseenteryear”〈cin〉〉year;
if((year%4==0)||(year%400==0))other=1;
elseother=0;
do{
cout〈<"pleaseentermonth”〈cin〉>month;
}
while(month<1||month〉12);
switch(month)
{
case1:
d=31;break;
case2:
d=28+other;break;
case3:
d=31;break;
case4:
d=30;break;
case5:
d=31;break;
case6:
d=30;break;
case7:
d=31;break;
case8:
d=31;break;
case9:
d=30;break;
case10:
d=31;break;
case11:
d=30;break;
case12:
d=31;break;
}
do
{
cout<<"pleaseenterday”〈cin>>day;
}
while(day>d||day〈1);
}//设定
voidcdate:
:
date_count_date()
{}cdate;
voidcdate_count:
:
set_today()
{
cout〈〈"pleaseenteryear_today”〈〈endl;
cin>>year_today;
if((year%4==0)||(year%400==0))other=1;
elseother=0;
do{
cout〈<"pleaseentermonth_today"<〈endl;
cin>>month_today;
}
while(month〈1||month>12);
switch(month)
{
case1:
d=31;break;
case2:
d=28+other;break;
case3:
d=31;break;
case4:
d=30;break;
case5:
d=31;break;
case6:
d=30;break;
case7:
d=31;break;
case8:
d=31;break;
case9:
d=30;break;
case10:
d=31;break;
case11:
d=30;break;
case12:
d=31;break;
}
do
{
cout<〈"pleaseenterday_today"〈〈endl;
cin>〉day_today;
}
while(day>d||day〈1);
}//设定今天
intcdate_count:
:
get_year_number(intw,inti)
{
y=w—i;
returny;
}
intcdate_count:
:
get_month_number(intx,intj)
{
m=x-j;
m=(m>=0)?
m:
-m;
returnm;
}
intcdate_count:
:
get_day_number(inty,intk)
{
d1=y—k;
d1=(d1>=0)?
d1:
—d1;
returnd1;
}
intcdate_count:
:
count(inty,intm,intd1)
{
y=get_year_number(year_today,year);
m=get_month_number(month_today,month);
d1=get_day_number(day_today,day);
cha=365*y+31*m+d1;
returncha;
}
voidcdate_count:
:
display()
{
cha=count(y,m,d1);
cout<〈”两个日期相差的天数为:
"〈〈cha<〈"day"<〈endl;
}
/******main。
cpp******/
#include"cdate2。
h”
#include
usingnamespacestd;
voidmain()
{
cdate_countcha;
cout<<”pleaseenterthedateoftoday”〈〈endl;
cha.set_today();
cout〈<”pleaseenterthedateofyouwanttosubtract:
"〈〈endl;
cha。
set();
cha.display();
}
运行结果截图
题目2:
定义一个学生类,数据有姓名(用指针实现)、学号、性别、出生日期(cdate类型),成绩,班排名;求一个班10名学生的平均分和排名。
源程序2
#ifndefSTUDENT_H
#defineSTUDENT_H
#include〈iostream〉
usingnamespacestd;
classcdate
{
public:
intyear;
intmonth;
intday;
voidset(intyy,intmm,intdd){
year=yy;month=mm;day=dd;}
};
classstudent
{
private:
charname[10];
charsex;//m代表男生,f代表女生
intnumber;
cdatebirth;
doublescore;
intrank;
public:
student()
{}
voidsets()
{intyy,mm,dd;
cin>〉name>>sex〉>number〉>score>〉yy>>mm>>dd;
birth。
set(yy,mm,dd);
rank=1;
}
doublegetscore()
{
returnscore;
}
voidsetrank()
{
rank++;
}
voidshow()
{
cout〈〈name<〈”排名:
"<}
};
#endif
/******main.cpp******/
#include
usingnamespacestd;
intmain()
{
inti,aver=0,j;
studentstu[10];
for(i=0;i<10;i++)
stu[i].sets();
for(i=0;i〈10;i++)//排名
{
for(j=0;j〈10;j++)
{
if(stu[j]。
getscore()〈stu[i]。
getscore())
stu[j].setrank();
}
}
for(i=0;i〈10;i++)
{
aver+=stu[i]。
getscore();
stu[i].show();
}
cout〈〈"Theaverageis:
"<return0;
}
运行结果截图
思考问题
1.什么是面向对象,面向对象有哪些特征。
答:
所谓面向对象,就是以对象的观点来分析现实世界中的问题。
从普通人认识世界的观点出发,把事物归类、综合,提取共性并加以描述.面向对象的特点有抽象、封装和信息隐藏、继承和多态。
2.什么是构造和析构函数,有什么特点,它们可以重载吗
答:
构造函数是一个函数名和类名相同的类成员函数,当这个类的对象被创建时,构造函数会被自动调用.构造函数可以重载。
析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,它