实验一类和对象Word文档格式.docx
《实验一类和对象Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一类和对象Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
VC++6.0
内
容
1.有以下程序:
ClassTime//定义Time类
{
public:
//数据成员为公用的
inthour;
intminute;
intsec;
};
voidmain()
Timetl;
//定义t1为Time类对象cin>
>
t1.hour;
//输入设定的时间cin>
t1.minute;
cin>
t1.sec;
cout<
<
t1.hourl<
”:
”<
t1.minute<
t1.sec<
endl;
}
改写程序,要求:
①将数据成员改为私有的;
②将输入和输出的功能改为由成员函数实现;
③在类体内定义成员函数。
然后编译和运行程序。
请分析什么成员应指定为公用的?
什么成员应指定为私有的?
什么函数最好放在类中定义?
什么函数最好在类外定义?
2.分别给出如下的3个文件:
①含类定义的头文件student.h,在此文件中进行类的声明;
ClassStudent//类声明
public:
//公用成员函数原型声明
voiddisplay();
private:
intnum;
charname[20];
charsex;
};
②包含成员函数定义的源文件student.Cpp,在此文件中进行函数的定义;
voidStudent:
:
display()//在类外定义display类函数
{cout<
”num:
num<
”name:
name<
”sex:
sex<
③包含主函数的源文件main.cpp。
为了组成一个完整的源程序,应当有包括主函数的源文件:
//将类声明头文件包含进来
#include“student.h”
Studentstud;
//定义对象
stud.display();
//执行stud对象的display函数
请完善该程序,在类中增加一个对数据成员赋初值的成员函数set_value。
上机调试并运行。
3.定义一个满足如下要求的Date类。
(1)用下面的格式输出日期:
日/月/年
(2)可运行在当前日上加一天操作
(3)设置日期。
代码见附录。
算
法
描
述
及
步
骤
1.Time类
(1)算法描述
a)先在Time.h中声明一个Time类,并在其中定义input()及output()成员函数,数据成员hour,minute和sec为private。
b)在主函数中定义对象t1,通过函数对t1赋值及输出t1。
(2)程序流程图
(3)主要代码
voidinput(inth,intm,ints)
{
hour=h;
minute=m;
sec=s;
}
voidoutput()
{
cout<
hour<
"
minute<
sec<
endl;
inthour;
//数据成员私有
intminute;
intsec;
intmain(intargc,char*argv[])
{
inth,m,s;
timet1;
cin>
h>
m>
s;
t1.input(h,m,s);
t1.output();
return0;
2.Student类
(1)算法描述
a)在Student.h中定义Student类,增加set_value()函数。
b)在Student2.cpp中定义display()及set_value()
c)在主函数中定义num,name,sex及对象stud。
d)对stud赋值及进行输出。
(3)主要代码
voidStudent:
set_value(intn,char*na,chars)
num=n;
strcpy(name,na);
sex=s;
display()
num:
name:
sex:
3.Date类
a)在Date.h中声明Date类,声明voidDisplay(),voidAddOneDay(),voidSetDay(inty,intm,intd),boolLegal(inty,intm,intd),boolIsLeapYear(inty)。
在Date2.cpp中定义它们。
b)主函数中定义对象d,赋值输出,加一天后输出。
调
试
过
程
结
果
出现的问题:
在类中使用了中文的“;
”;
在建立工程时选了空工程,不会使用VC6.0;
改正结果:
出现的问题:
因为没有把stdafx.h头文件放在第一行,而导致编译报错;
因为没有预编译头文件而导致无法编译;
因为在main函数文件中包含了Student2.cpp,导致函数重定义,编译不成功。
改正后成功,结果:
3.Date类
编译成功
总
1.要注意输入,中英文的切换。
2.在所有非main函数的.cpp文件中都要包含stdafx而且必须放
在文件的第一行。
3.在写程序时VC6.0使用预编译头文件,必须先对头文件进行预编译,才能让整个程序完成编译。
4.要注意编译器对文件的编译过程,不要重复使用一个文件,让编译器对其重复编译,这样也会报错。
附
录
3.代码如下:
classDate{
voidDisplay();
voidAddOneDay();
voidSetDay(inty,intm,intd);
protected:
boolLegal(inty,intm,intd);
boolIsLeapYear(inty);
intyear;
intmonth;
intday;
voidDate:
Display()
cout<
day<
/"
<
month<
year<
AddOneDay()
if(Legal(year,month,day+1))
day++;
elseif(Legal(year,month+1,1))
month++,day=1;
elseif(Legal(year+1,1,1))
day=1,month=1,year++;
SetDay(inty,intm,intd)
if(Legal(y,m,d))
day=d,month=m,year=y;
boolDate:
Legal(inty,intm,intd)
if(y>
9999||y<
1||d<
1||m<
1||m>
12)
returnfalse;
intdayLimit=31;
switch(m)case4:
case6:
case9:
case11:
dayLimit--;
if(m==2)dayLimit=IsLeapYear(y)?
29:
28;
return(d>
dayLimit)?
false:
true;
IsLeapYear(inty)
return!
(y%4)&
&
(y%100)||!
(y%400);
intmain()
Dated;
d.SetDay(2010,2,28);
d.Display();
d.AddOneDay();
system("
PAUSE"
);