c++实验报告doc.docx
- 文档编号:6676065
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:17
- 大小:67.33KB
c++实验报告doc.docx
《c++实验报告doc.docx》由会员分享,可在线阅读,更多相关《c++实验报告doc.docx(17页珍藏版)》请在冰豆网上搜索。
c++实验报告doc
实验报告
(2014/2015学年第二学期)
课程名称
面向对象程序设计及C++
实验名称
实验一:
类和对象的定义及使用
实验时间
2015
年
3
月
25
日
指导单位
物联网学院
指导教师
肖学中
学生姓名
张殷虔
班级学号
B14070519
学院(系)
物联网学院
专业
物联网工程
实验报告
实验名称
类和对象的定义及使用
指导教师
肖学中
实验类型
验证
实验学时
2
实验时间
3月20日
一、实验目的和要求
(1)掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的工作机制。
(2)正确掌握类的不同属性成员的使用方法。
(3)掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。
(4)掌握友元函数和友元类的定义和使用。
(5)基本掌握指针和引用作为函数参数的应用。
二、实验环境(实验设备)
硬件:
微型计算机
软件:
MicrosoftVisualC++6.0
三、实验原理及内容
实验题目
(1)定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。
①按要求完成类的定义与实现。
②修改数据成员的访问方式,观察编译结果。
③在Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。
④定义一个普通函数。
voidf(Timet)
{
t.PrintTime();
}
在Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为{t->PrintTime();},主函数中调用,再分析此时调用构造函数和析构函数的次数。
实验报告
参考实验教材中相应的实验提示部分按要求完成程序,并回答相关问题。
要求①完成后的源程序代码如下:
#include
usingnamespacestd;
classTime
{
private:
intHour,Minute,Second;
public:
Time(inth=0,intm=0,ints=0);
Time(constTime&ob);
~Time();
voidChangeTime(inth,intm,ints);
intGetHour();
intGetMinute();
intGetSecond();
voidPrintTime();
voidIncreaseOneSecond();
};
Time:
:
Time(inth,intm,ints)
{
Hour=h;
Minute=m;
Second=s;
}
Time:
:
Time(constTime&ob)
{
Hour=ob.Hour;
Minute=ob.Minute;
Second=ob.Second;
}
Time:
:
~Time()
{
}
voidTime:
:
ChangeTime(inth,intm,ints)
{
Hour=h;
Minute=m;
Second=s;
}
intTime:
:
GetHour()
{
returnHour;
}
intTime:
:
GetMinute()
{
returnMinute;
}
intTime:
:
GetSecond()
{
returnSecond;
}
voidTime:
:
PrintTime()
{
cout< "< "< } voidTime: : IncreaseOneSecond() { Second++; } /*voidTime: : f(Timet) { t.PrintTime(); cout<<"callf\n"; }*/ intmain() { Timea; Timeb(13); Timec(13,15); Timed(13,15,45); a.PrintTime(); b.PrintTime(); c.PrintTime(); d.PrintTime(); a.ChangeTime(12,15,45); b.ChangeTime(12,15,45); c.ChangeTime(12,15,45); d.ChangeTime(12,15,45); cout< "< "< cout< "< "< cout< "< "< cout< "< "< return0; } 程序的运行结果是: 0: 0: 0 13: 0: 0 13: 15: 0 13: 15: 45 12: 15: 45 12: 15: 45 12: 15: 45 12: 15: 45 Pressanykeytocontinue 构造函数与析构函数的调用方式及执行顺序是: 先是构造函数然后是析构函数。 调用方式是自动调用,执行顺序是先执行构造函数,待程序结束时再执行析构函数。 实验报告 ③取消类中成员函数IncreaceOneSecond( )的注释标志,将该函数补充完整,注意时间在增加一秒情况下的进位关系。 该函数的代码如下: voidTime: : IncreaseOneSecond() { if(Second<59) Second++; elseif(Second==59&&Minute==59&&Hour==23) { Hour=0; Minute=0; Second=0; } elseif(Second==59&&Minute==59&&Hour<23) { Minute=0; Second=0; Hour++; } elseif(Second==59&&Minute<59&&Hour<23) { Minute++; Second=0; Hour++; } cout< "< "< } ④主函数中定义一个Time类对象并调用一次f函数,观察结果填写下表: f函数的原型 主函数中调用f的语句 构造函数 调用次数 拷贝构造函数调用次数 析构函数调用次数 voidf(Timet); F(t0) 1 1 2 voidf(Time&t); F(t0) 1 0 1 voidf(Time*t); F(p) 1 0 1 通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结论? 实验报告 实验题目 (2)定义一个Girl类和一个Boy类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。 ①根据要求定义相应的类。 ②将Girl类作为Boy类的友元类,在Girl类的成员函数VisitBoy(Boy&)中访问Boy类的私有成员,观察程序运行结果。 ③在Boy类的某成员函数VisitGirl(Girl&)中试图访问Girl类的私有成员,观察编译器给出的错误信息,理解原因。 ④主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。 ⑤再将Boy类作为Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl&)中访问Girl类的私有成员,观察编译器给出的信息。 ⑥删除两个类中的函数VisitGirl(Girl&),VisitBoy(Boy&),定义一个顶层函数VisitBoyGirl(Boy&,Girl&),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。 实验解答: ①定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息。 源程序代码如下: #include usingnamespacestd; classBoy; classGirl { public: charname[25]; intage; Girl(charN[],intA=19); ~Girl(); voidprint(); voidVisitBoy(Boy&); }; classBoy { public: charname[25]; intage; Boy(charN[],intA=19); ~Boy(); voidprint(); friendGirl; }; Boy: : Boy(charN[],intA) { strcpy(name,N); age=A; } Boy: : ~Boy() { } voidBoy: : print() { cout<<"Boy: "< } Girl: : Girl(charN[],intA) { strcpy(name,N); age=A; } Girl: : ~Girl() { } voidGirl: : print() { cout<<"Girl: "< } voidGirl: : VisitBoy(Boy&boy) { cout<<"Boy'sname: "< cout<<"Boy'sage: "< } intmain() { Boya("xpx",19); Girlb("lala",19); b.VisitBoy(a); a.print(); b.print(); return0; } 实验报告 程序的运行结果是: Boy'sname: xpx Boy'sage: 19 Boy: xpx19 Girl: lala19 Pressanykeytocontinue ②将Girl类作为Boy类的友元类,写出Girl类的成员函数VisitBoy(Boy&)的实现代码。 voidGirl: : VisitBoy(Boy&boy) { cout<<"Boy'sname: "< cout<<"Boy'sage: "< } 实验报告 在Boy类的某成员函数VisitGirl(Girl&)中试图访问Girl类的私有成员,记录编译器给出的错误信息,与②对比,你能得出友元的什么特性? 友元关系是单向的,不具有交换性 ④在上面代码的基础上,在Girl类的定义中,增加一行代码: friendBoy;在主函数中通过Boy类对象.VisitGirl(Girl类对象)的形式输出Girl类对象的信息。 编译的结果是? 写出这一步你的主函数代码,要求分别用友元函数Girl类对象.VisitBoy(Boy类对象);和Boy类对象.VisitGirl(Girl类对象);和输出两个类对象的信息。 D: \MicrosoftVisualStudio\MyProjects\实验二\exp3_1.cpp|14|error: no`voidGirl: : VisitBoy(Boy&)'memberfunctiondeclaredinclass`Girl'| G1.VisitBoy(B2); B2.VisitGirl(G1); 输出: Girlconstructing Boyconstructing Boy'sname: Jack Boy'sage: 22 Girl'sname: Mary Girl'sage: 20 实验报告 ⑤定义一个顶层函数voidVisitBoyGirl(Boy&,Girl&),作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息。 写出该友元函数的完整代码,以及主函数的代码。 voidVisitBoyGirl(Boy&boy,Girl&girl) { cout<<"Girl'sname: "< cout<<"Girl'sage: "< cout<<"Boy'sname: "< cout<<"Boy'sage: "< } VisitBoyGirl(B2,G1); 实验报告 四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 1.在题目 (1)中②不改变main()函数中的对象的定义方式,若取消构造函数中参数的默认值,编译程序错误提示信息及出错原因是: D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|7|error: nomatchingfunctionforcallto`Time: : Time()'| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|8|error: nomatchingfunctionforcallto`Time: : Time(int)'| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|9|error: nomatchingfunctionforcallto`Time: : Time(int,int)'| 函数二义性 2.在题目 (1)中 如果删除类中自定义的构造函数,仅使用系统默认构造函数,再编译,程序错误提示信息及出错原因是: D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|7|error: nomatchingfunctionforcallto`Time: : Time()'| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|8|error: nomatchingfunctionforcallto`Time: : Time(int)'| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|9|error: nomatchingfunctionforcallto`Time: : Time(int,int)'| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|10|error: nomatchingfunctionforcallto`Time: : Time(int,int,int)'| 构造函数实参不正确 3.在题目 (1)中 恢复成 的正确状态,如果将main()函数中的输出语句改为: cout<<对象名.Hour<<": "<<对象名.Minute<<": "<<对象名.Second< 在这种情况下,如果将成员变量的访问属性修改为public再编译,结果如何? D: \MicrosoftVisualStudio\MyProjects\实验一\Time.h|17|error: `intTime: : Hour'isprivate| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: withinthiscontext| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: `t4.Time: : Hour'cannotbeusedasafunction| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.h|17|error: `intTime: : Minute'isprivate| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: withinthiscontext| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: `t4.Time: : Minute'cannotbeusedasafunction| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.h|17|error: `intTime: : Second'isprivate| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: withinthiscontext| D: \MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|17|error: `t4.Time: : Second'cannotbeusedasafunction| 5.心得体会: 1,注意向前引用。 2,要注意构造函数的用法。 3,友元可以提高效率,方便编程。 但会破坏类的整体操作性和封装性。 五、指导教师评语 成绩 批阅人 日期 XX大学生实习报告总结3000字 社会实践只是一种磨练的过程。 对于结果,我们应该有这样的胸襟: 不以成败论英雄,不一定非要用成功来作为自己的目标和要求。 人生需要设计,但是这种设计不是凭空出来的,是需要成本的,失败就是一种成本,有了成本的投入,就预示着的人生的收获即将开始。 小草用绿色证明自己,鸟儿用歌声证明自己,我们要用行动证明自己。 打一份工,为以后的成功奠基吧! 在现今社会,招聘会上的大字板都总写着“有经验者优先”,可是还在校园里面的我们这班学子社会经验又会拥有多少呢? 为了拓展自身的知识面,扩大与社会的接触面,增加个人在社会竞争中的经验,锻炼和提高自己的能力,以便在以后毕业后能真正的走向社会,并且能够在生活和工作中很好地处理各方面的问题记得老师曾说过学校是一个小社会,但我总觉得校园里总少不了那份纯真,那份真诚,尽管是大学高校,学生还终归保持着学生身份。 而走进企业,接触各种各样的客户、同事、上司等等,关系复杂,但你得去面对你从没面对过的一切。 记得在我校举行的招聘会上所反映出来的其中一个问题是,学生的实际操作能力与在校的理论学习有一定的差距。 在这次实践中,这一点我感受很深。 在学校,理论学习的很多,而且是多方面的,几乎是面面俱到的,而实际工作中,可能会遇到书本上没学到的,又可能是书本上的知识一点都用不上的情况。 或许工作中运用到的只是简单的问题,只要套公式就能完成一项任务,有时候你会埋怨,实际操作这么简单,但为什么书本上的知识让人学的那么吃力呢? 两耳不闻窗外事,一心只读圣贤书“只是古代读书人的美好意愿,它已经不符合现代大学生的追求,如今的大学生身在校园,心儿却更加开阔,他们希望自己尽可能早地接触社会,更早地融入丰富多彩的生活。 时下,打工的大学生一族正逐渐壮大成了一个部落,成为校园里一道亮丽的风景。 显然,大学生打工已成为一种势不可挡的社会潮流,大学生的价值取向在这股潮流中正悄悄发生着改变。 对于大学生打工,一直是”仁者见仁,智者见智“,许多人的看法不尽相同。 每个人都有自己的人生模式,我们有理由走自己选择的人生路,只要把握住自己,掌握好学习与打工的分寸,肯定能把大学这个人生阶段过得丰富多彩。 打工的途径或者形式多种多样,只要是对社会有益,对自己积累人生经历有益,还能够有少量收入,就可以毫不犹豫的参与其中。 虽然在实践中我只是负责比较简单的部分,但能把自己在学校学到的知识真正运用出来也使我颇感兴奋! 在学校上课时都是老师在教授,学生听讲,理论占主体,而我对知识也能掌握,本以为到了企业能够应付得来,但是在企业里并没有想象的那么容易,平时在学校数字错了改一改就可以交上去,但在工厂里,数字绝对不可以错,因为质量是企业第一生命,质量不行,企业生产就会跟不上,而效率也会随之下降,企业就会在竞争的浪潮中失败。 因此,每一个环节都不能出错。 这种要求是我们在课堂上学不到的。 在学校里可能只需会解一道题,算出一个程式就可以了,但这里更需要的是与实际相结合,没有实际,只是纸上谈兵是不可能在社会立足的,所以一定要特别小心谨慎,而且一旦出错并不是像学校里一样老师打个红叉,然后改过来就行了,在工厂里出错是要负责任的,这关乎工厂的利益存亡。 总之,这个寒假的社会实践是丰富而又有意义,一些心得和体会让人感到兴奋,但却决不仅仅用兴奋就能描述的,因为这是一种实实在在收获,是对”有经验者优先“的感悟。 …… 在我的打工生活中,我也明白了许多: 在日常的工作中上级欺压、责备下级是不可避免的。 虽然事实如此,但这也给我上了宝贵的一课。 它让我明白到别人批评你或是你听取他人的意见时,一定要心平气和,只有这样才能表示你在诚心听他说话。 虽然被批评是很难受的,而且要明确表示你是真心在接受他们的批评。 因为这样才能在失败中吸取教训,为以后的成功铺路。 我们要学会从那里跌倒就从哪里爬起来,这才是我所应该做的。 我也从工作中学习到了人际交往和待人处事的技巧。 在人与人的交往中,我能看到自身的价值。 人往往是很执着的。 可是如果你只问耕耘不问收获,那么你一定会交得到很多朋友。 对待朋友,切不可斤斤计较,不可强求对方付出与你对等的真情,要知道给予比获得更令人开心。 不论做是事情,都必须有主动性和积极性,对成功要有信心,要学会和周围的人沟通思想、关心别人、支持别人。 打工的日子,有喜有忧,有欢乐,也有苦累,也许这就是打工生活的全部吧。 我不知道多少打工的人有过这种感觉,但总的来说,这次的打工生活是我人生中迈向社会的重要一步,是值得回忆的。 现在想来,二十四天的打工生活,我收获还是蛮大的。 我所学到的生活的道理是我在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实验 报告 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)