《C++程序设计》实验二报告.docx
《《C++程序设计》实验二报告.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》实验二报告.docx(9页珍藏版)》请在冰豆网上搜索。
![《C++程序设计》实验二报告.docx](https://file1.bdocx.com/fileroot1/2022-11/16/8e0f166b-a2af-4124-bace-f767cd769140/8e0f166b-a2af-4124-bace-f767cd7691401.gif)
《C++程序设计》实验二报告
《C++程序设计(B)》课程实验报告
姓 名:
满恂钰
班级学号:
通信2班2016080331040
学院:
智慧城市学院
专业:
通信工程
指导教师:
肖明明
2018年05月14日
实验二类和对象
上课时间:
2018.5.14地点:
实验楼0709
一实验目的
1.掌握类的声明和使用。
2.掌握对象的声明。
3.复习具有不同访问属性的成员的访问方式。
4.观察构造函数和析构函数的执行过程。
5.学习类的组合使用方法。
二实验内容
1、实验内容1
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中,rank为枚举类型CPU-Rank,声明为enumCPU-Rank{P1=1,P2,P3,P4,P5,P6,P7};frequency为单位是MHz的整型数,voltage为浮点型的电压值。
观察构造函数和析构函数的调用顺序。
【源程序】
#include
usingnamespacestd;
enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};
classCPU
{
private:
CPU_Rankrank;
intfrequency;
floatvoltage;
public:
CPU(intra,intfre,floatvol)
{
rank=(CPU_Rank)ra;
frequency=fre;
voltage=vol;
cout<<"等级:
"<cout<<"频率:
"<cout<<"电压:
"<cout<<"构造了一个CPU!
"<}
~CPU()
{
cout<<"析构了一个CPU!
"<}
voidRun()
{
cout<<"CPUisruning!
"<}
voidStop()
{
cout<<"CPUisstop!
"<}
};
intmain()
{
CPUa(2,30,220);
a.Run();
a.Stop();
}
【结果及分析】
(1)实验结果截图
(2)实验结果分析:
掌握了类的声明和使用以及对象的声明,初步明白了析构函数和构造函数的调用顺序,实验通过。
【错误及解决办法】
错误:
cout<<"等级:
"<解决方法:
把enum(P7)替换成ra即可。
2、实验内容2
声明一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。
Cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。
【源程序】
#include
usingnamespacestd;
enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};
classCPU
{
private:
CPU_Rankrank;
intCpu;
public:
CPU(){cout<<"构造了一个CPU!
"<~CPU(){cout<<"析构了一个CPU!
"<voidRun(){cout<<"CPUisruning!
"<voidStop(){cout<<"CPUisstop!
"<};
classRAM
{
private:
intram;
public:
RAM(){cout<<"构造了一个ram!
"<~RAM(){cout<<"析构了一个ram!
"<voidRun(){cout<<"ram开始运行!
"<voidstop(){cout<<"ram停止运行!
"<};
classCDROM
{
private:
intcdrom;
public:
CDROM(){cout<<"构造了一个cdrom!
"<~CDROM(){cout<<"析构了一个cdrom!
"<voidRun(){cout<<"cdrom开始运行!
"<voidstop(){cout<<"cdrom停止运行!
"<};
classCOMPUTER
{
private:
CPUCpu;
RAMram;
CDROMcdrom;
public:
COMPUTER(){cout<<"构造了一个computer!
"<~COMPUTER(){cout<<"析构了一个computer!
"<voidRun(){cout<<"computer开始运行"<voidStop(){cout<<"computer停止运行"<};
intmain(){
COMPUTERa;
a.Run();
a.Stop();
return0;
}
【结果及分析】
(1)实验结果截图
(2)实验结果分析:
调用析构函数的次序正好与调用构造函数的次序相反:
最先被调用的构造函数,其对应的析构函数最后被调用。
例如图中CPU。
而最后被调用的构造函数,其对应的析构函数最先被调用。
规律:
先构造的后析构,后构造的先析构,实验通过。
【错误及解决办法】
错误:
一开始一个类里面构造了过多的参数,导致程序杂乱并且不能很好的使用参数导致程序编译时出现许多错误。
解决方法:
删除了没有意义的参数,只留下了cout输出语句,使程序运行时打印出来的结果清晰明了。
3、实验内容3
设计一个用于人事管理的People(人员)类。
考虑到通用性,这里只抽象出所有类型人员都具有的属性:
number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。
其中"出生日期"定义为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
构造函数和析构函数、复制构造函数、内联成员函数、带缺省形参值的成员函数、聚集。
【源程序】
#include
#include
usingnamespacestd;
classdata
{
private:
intyear;
intmonth;
intday;
public:
data(){cout<<"构造了一个日期!
"<~data(){cout<<"析构了一个日期!
"<voidsetdata(intY,intM,intD)
{
year=Y;
month=M;
day=D;
}
voiddisplay()
{
cout<}
};
classpeople
{
private:
intnumber;
charsex;
databirthday;
charid[18];
public:
people(){cout<<"构造了一个人的信息!
"<~people(){cout<<"析构了一个人的信息!
"<setpeople(intNu,charsex,charid[18]):
birthday(year,month,day)
{
number=Nu;
sex=sex;
birthday=bir;
strcpy(id,id);
cout<<"编号:
"<cout<<"性别:
"<cout<<"生日:
"<cout<<"身份证:
"<}
};
intmain()
{
datab;
b.setdata(1998,07,27);
b.display();
peoplep1;
p1.setpeople(40,"m",07.27,530322);
return0;
}
【结果及分析】
(1)实验结果截图
程序编译出现8个错误。
运行未通过。
(2)错误分析:
组合类构造函数以及复制构造函数知识点不清晰,不能正确应用。
【错误及解决办法】
错误:
1、未编写复制构造函数。
2、未编写组合类构造函数。
解决方法:
1、复制构造函数语句:
Date(Date&birthday){//Date的复制构造函数的实现
year=birthday.year;
month=birthday.month;
day=birthday.day;
}
2、组合构造函数语句:
People:
:
People(intn,strings,inti,Dateb):
number(n),sex(s),id(i),birthday(b){}
三实验总结
1.成功编写了实验内容要求一和二的程序、编译并调试通过。
2.实验报告按照“实验报告模板”书写,思路清晰,格式规范。
3.实验报告中写清了姓名、学号、实验时间地点、实验题目、实验目的、实验内容及实验过程。
4.有实验结果分析。
报告中应含源代码,打印出了运行结果;未调试通过或结果不正确的程序,分析了原因。
5.实验报告中记录编程过程中出现的错误与改正方法。
6.通过这三个小实验的编写,使我知道了关于这一章节我还有哪些知识点还有待加强,以及在编程速度上略微缓慢(单词的不熟、打字速度慢)。
对于实验2,虽然没有参数看起来更清晰明了,但有了参数可以更直观的了解析构函数和构造函数内部语句的调用顺序以及是否被调用,因此,我认为应当在其加入一些参数。