c++实验报告.doc_第1页
c++实验报告.doc_第2页
c++实验报告.doc_第3页
c++实验报告.doc_第4页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告( 2014 / 2015学年 第 二 学期)课程名称面向对象程序设计及C+实验名称实验一:类和对象的定义及使用实验时间2015年3月25日指导单位物联网学院指导教师肖学中学生姓名学院(系)张殷虔物联网学院班级学号专 业B14070519物联网工程实验报告实验名称类和对象的定义及使用指导教师肖学中实验类型验证实验学时2实验时间3 月 20 日一、实验目的和要求(1)掌握类与对象的定义与使用方法, 理解面向对象方法中通过对象间传递消息的工作机制。(2)正确掌握类的不同属性成员的使用方法。(3)掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。(4)掌握友元函数和友元类的定义

2、和使用。(5)基本掌握指针和引用作为函数参数的应用。二、 实验环境 ( 实验设备 )硬件 :微型计算机软件 : Microsoft Visual C+6.0三、实验原理及内容实验题目( 1)定义一个时间类 Time,有三个私有成员变量 Hour、Minute 、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。 按要求完成类的定义与实现。 修改数据成员的访问方式,观察编译结果。 在 Time 类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一

3、秒后的时间信息。 定义一个普通函数。void f(Time t)t. PrintTime( );在 Time 类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f 函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为t-> PrintTime( );,主函数中调用,再分析此时调用构造函数和析构函数的次数。1实验报告参考实验教材中相应的实验提示部分按要求完成程序,并回答相关问题。要求完成后的源程序代码如下:#include<iostream>using namespace std;cla

4、ss Timeprivate:int Hour,Minute,Second;public:Time(int h=0,int m=0,int s=0);Time(const Time &ob);Time();void ChangeTime(int h,int m,int s);int GetHour();int GetMinute();int GetSecond();void PrintTime();void IncreaseOneSecond();Time:Time(int h,int m,int s)Hour=h;Minute=m;Second=s;Time:Time(const T

5、ime &ob)Hour=ob.Hour;Minute=ob.Minute;Second=ob.Second;Time:Time()void Time:ChangeTime(int h,int m,int s)2Hour=h;Minute=m;Second=s;int Time:GetHour()return Hour;int Time:GetMinute()return Minute;int Time:GetSecond()return Second;void Time:PrintTime()cout<<Hour<<": "<<

6、Minute<<": "<<Second<<endl;void Time:IncreaseOneSecond()Second+;/*void Time:f(Time t)t.PrintTime();cout<<"call fn"*/int main()Time a;Time b(13);Time c(13,15);Time d(13,15,45);a.PrintTime();b.PrintTime();3c.PrintTime();d.PrintTime();a.ChangeTime(12,15,45);b

7、.ChangeTime(12,15,45);c.ChangeTime(12,15,45);d.ChangeTime(12,15,45);cout<<a.GetHour()<<":"<<a.GetMinute()<<":"<<a.GetSecond()<<endl;cout<<b.GetHour()<<":"<<b.GetMinute()<<":"<<b.GetSecond()<&

8、lt;endl;cout<<c.GetHour()<<":"<<c.GetMinute()<<":"<<c.GetSecond()<<endl;cout<<d.GetHour()<<":"<<d.GetMinute()<<":"<<d.GetSecond()<<endl;return 0;程序的运行结果是:0:0:013: 0: 013: 15: 013: 15: 4512

9、:15:4512:15:4512:15:4512:15:45Press any key to continue4构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数。调用方式是自动调用, 执行顺序是先执行构造函数,待程序结束时再执行析构函数。实验报告5取消类中成员函数 IncreaceOneSecond( 的)注释标志,将该函数补充完整,注意时间在增加一秒情况下的进位关系。该函数的代码如下:void Time:IncreaseOneSecond()if(Second<59)Second+;else if(Second=59&&Minute=59&&

10、amp;Hour=23)Hour=0;Minute=0;Second=0;else if(Second=59&&Minute=59&&Hour<23)Minute=0;Second=0;Hour+;else if(Second=59&&Minute<59&&Hour<23)Minute+;Second=0;Hour+;cout<<Hour<<":"<<Minute<<":"<<Second<<endl;

11、 主函数中定义一个 Time 类对象并调用一次 f 函数,观察结果填写下表:f 函数的原型主函数中调用 f构造函数拷贝构造函数析构函数的语句调用次数调用次数调用次数void f(Time t);F(t0)112void f(Time &t);F(t0)101void f(Time *t);F(p)101通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结论?实验报告6实验题目( 2) 定义一个 Girl 类和一个 Boy 类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公

12、有成员函数。根据要求定义相应的类。将 Girl类作为 Boy 类的友元类,在Girl类的成员函数VisitBoy(Boy & )中访问Boy 类的私有成员,观察程序运行结果。在 Boy 类的某成员函数VisitGirl(Girl & )中试图访问 Girl类的私有成员,观察编译器给出的错误信息,理解原因。主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。再将 Boy 类作为 Girl 类的友元类,在 Boy 类的某成员函数 VisitGirl(Girl & ) 中访问 Girl 类的私有成员,观察编译器给出的信息。删除两个类中的函数VisitGirl(Gir

13、l & ), VisitBoy(Boy & ),定义一个顶层函数 VisitBoyGirl(Boy &, Girl &) ,作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。实验解答:定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息。源程序代码如下:#include<iostream>using namespace std;class Boy;class Girlpublic:char name25;int age;Girl(char N,int A=19);Girl();void print();void VisitBoy

14、(Boy& );class Boypublic:char name25;int age;Boy(char N,int A=19);Boy();void print();friend Girl;Boy:Boy(char N,int A)strcpy(name,N);age=A;7Boy:Boy()void Boy:print()cout<<"Boy: "<<name<<" "<<age<<endl;Girl:Girl(char N,int A)strcpy(name,N);age=A;Gi

15、rl:Girl()void Girl:print()cout<<"Girl: "<<name<<" "<<age<<endl;void Girl:VisitBoy(Boy & boy)cout<<"Boy's name: "<<<<endl;cout<<"Boy's age: "<<boy.age<<endl;int main()Boy a(&q

16、uot;xpx",19);Girl b("lala",19);b.VisitBoy(a);a.print();b.print();return 0;实验报告8程序的运行结果是:Boy's name: xpxBoy's age: 19Boy: xpx 19Girl: lala 19Press any key to continue将 Girl 类作为 Boy 类的友元类, 写出 Girl 类的成员函数 VisitBoy(Boy & ) 的实现代码。void Girl:VisitBoy(Boy & boy)cout<<&qu

17、ot;Boy's name: "<<<<endl;cout<<"Boy's age: "<<boy.age<<endl;实验报告 在 Boy 类的某成员函数 VisitGirl(Girl & ) 中试图访问 Girl 类的私有成员,记录编译器给出的错误信息,与对比,你能得出友元的什么特性?友元关系是单向的,不具有交换性9在上面代码的基础上,在 Girl 类的定义中,增加一行代码: friend Boy; 在主函数中通过 Boy 类对象 . VisitGirl(Gir

18、l 类对象 ) 的形式输出 Girl 类对象的信息。编译的结果是?写出这一步你的主函数代码,要求分别用友元函数Girl 类对象 . VisitBoy(Boy 类对象 );和 Boy 类对象 . VisitGirl(Girl 类对象 ) ;和输出两个类对象的信息。D:MicrosoftVisual实 验 二 exp3_1.cpp|14|error: novoid Girl:VisitBoy(Boy&)' member function declared in class Girl'|G1.VisitBoy(B2);B2.VisitGirl(G1);输出:Girl cons

19、tructingBoy constructingBoy's name: JackBoy's age: 22Girl's name: MaryGirl's age: 20实验报告定义一个顶层函数 void VisitBoyGirl(Boy &, Girl &), 作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函数的代码。void VisitBoyGirl(Boy &boy, Girl &girl)cout<<"Girl's name: "

20、<<<<endl;cout<<"Girl's age: "<<girl.age<<endl;cout<<"Boy's name: "<<<<endl;cout<<"Boy's age: "<<boy.age<<endl;VisitBoyGirl(B2, G1);10实验报告四、实验小结 (包括问题和解决方法、心得体会、意见与建议等)1. 在题目(

21、1)中不改变 main() 函数中的对象的定义方式, 若取消构造函数中参数的默认值,编译程序错误提示信息及出错原因是:D:MicrosoftVisual实验一 Time.cpp|7|error:no matchingfunction for call to Time:Time()'|D:MicrosoftVisual实验一 Time.cpp|8|error:no matchingfunction for call to Time:Time(int)'|D:MicrosoftVisual实验一 Time.cpp|9|error:no matchingfunction for ca

22、ll to Time:Time(int, int)'|函数二义性2. 在题目( 1)中如果删除类中自定义的构造函数,仅使用系统默认构造函数,再编译,程序错误提示信息及出错原因是:D:MicrosoftVisual实验一 Time.cpp|7|error:no matchingfunction for call to Time:Time()'|D:MicrosoftVisual实验一 Time.cpp|8|error:no matchingfunction for call to Time:Time(int)'|D:MicrosoftVisual实验一 Time.cpp|

23、9|error:no matchingfunction for call to Time:Time(int, int)'|D:Microsoft实验一 Time.cpp|10|error:no matchingfunction for call to Time:Time(int, int, int)'|构造函数实参不正确3. 在题目( 1)中恢复成的正确状态,如果将main() 函数中的输出语句改为:cout<< 对象名 .Hour<<":"<< 对象名 .Minute<<":"<&l

24、t;对象名 .Second<<endl; 重新编译,会出现什么错误提示?在这种情况下,如果将成员变量的访问属性修改为public再编译,结果如何?D:MicrosoftVisual实 验一 Time.h|17|error:intTime:Hour' is private|实验一 Time.cpp|17|error: within thiscontext|D:MicrosoftVisual实验 一 Time.cpp|17|error:t4.Time:Hour' cannot be used as a function|D:MicrosoftVisual实 验一 Tim

25、e.h|17|error:intTime:Minute' is private|实验一 Time.cpp|17|error: within thiscontext|D:MicrosoftVisual实验 一 Time.cpp|17|error:t4.Time:Minute' cannot be used as a function|D:MicrosoftVisual实 验一 Time.h|17|error:intTime:Second' is private|11实验一 Time.cpp|17|error: within thiscontext|D:MicrosoftV

26、isual实验一Time.cpp|17|error:t4.Time:Second' cannot be used as a function|5. 心得体会:1,注意向前引用。 ,2,要注意构造函数的用法。3,友元可以提高效率,方便编程。但会破坏类的整体操作性和封装性。五、指导教师评语成绩批阅人日期XX大学生实习报告总结3000 字社会实践只是一种磨练的过程。对于结果,我们应该有这样的12胸襟:不以成败论英雄,不一定非要用成功来作为自己的目标和要求。人生需要设计,但是这种设计不是凭空出来的,是需要成本的,失败就是一种成本,有了成本的投入,就预示着的人生的收获即将开始。小草用绿色证明自己

27、,鸟儿用歌声证明自己,我们要用行动证明自己。打一份工,为以后的成功奠基吧!在现今社会,招聘会上的大字板都总写着“有经验者优先”,可是还在校园里面的我们这班学子社会经验又会拥有多少呢?为了拓展自身的知识面,扩大与社会的接触面,增加个人在社会竞争中的经验,锻炼和提高自己的能力,以便在以后毕业后能真正的走向社会,并且能够在生活和工作中很好地处理各方面的问题记得老师曾说过学校是一个小社会,但我总觉得校园里总少不了那份纯真,那份真诚,尽管是大学高校,学生还终归保持着学生身份。而走进企业,接触各种各样的客户、同事、上司等等,关系复杂,但你得去面对你从没面对过的一切。记得在我校举行的招聘会上所反映出来的其中

28、一个问题是,学生的实际操作能力与在校的理论学习有一定的差距。在这次实践中,这一点我感受很深。在学校,理论学习的很多,而且是多方面的,几乎是面面俱到的,而实际工作中,可能会遇到书本上没学到的,又可能是书本上的知识一点都用不上的情况。或许工作中运用到的只是简单的问题,只要套公式就能完成一项任务,有时候你会埋怨,实际操作这么简单,但为什么书本上的知识让人学的那么吃力呢 ?13两耳不闻窗外事,一心只读圣贤书“只是古代读书人的美好意愿,它已经不符合现代大学生的追求,如今的大学生身在校园,心儿却更加开阔,他们希望自己尽可能早地接触社会,更早地融入丰富多彩的生活。 时下,打工的大学生一族正逐渐壮大成了一个部

29、落,成为校园里一道亮丽的风景。显然,大学生打工已成为一种势不可挡的社会潮流, 大学生的价值取向在这股潮流中正悄悄发生着改变。对于大学生打工,一直是”仁者见仁,智者见智“ , 许多人的看法不尽相同。每个人都有自己的人生模式,我们有理由走自己选择的人生路,只要把握住自己,掌握好学习与打工的分寸,肯定能把大学这个人生阶段过得丰富多彩。打工的途径或者形式多种多样,只要是对社会有益,对自己积累人生经历有益,还能够有少量收入,就可以毫不犹豫的参与其中。虽然在实践中我只是负责比较简单的部分,但能把自己在学校学到的知识真正运用出来也使我颇感兴奋 ! 在学校上课时都是老师在教授,学生听讲,理论占主体,而我对知识

30、也能掌握,本以为到了企业能够应付得来,但是在企业里并没有想象的那么容易,平时在学校数字错了改一改就可以交上去,但在工厂里,数字绝对不可以错,因为质量是企业第一生命,质量不行,企业生产就会跟不上,而效率也会随之下降,企业就会在竞争的浪潮中失败。因此,每一个环节都不能出错。这种要求是我们在课堂上学不到的。在学校里可能只需会解一道题,算出一个程式就可以了,但这里更需要的是与实际相结合,没有实际,只是纸上谈兵是不可能14在社会立足的,所以一定要特别小心谨慎,而且一旦出错并不是像学校里一样老师打个红叉,然后改过来就行了,在工厂里出错是要负责任的,这关乎工厂的利益存亡。 总之,这个寒假的社会实践是丰富而又

31、有意义,一些心得和体会让人感到兴奋,但却决不仅仅用兴奋就能描述的,因为这是一种实实在在收获,是对”有经验者优先“的感悟。在我的打工生活中,我也明白了许多:在日常的工作中上级欺压、责备下级是不可避免的。虽然事实如此,但这也给我上了宝贵的一课。它让我明白到别人批评你或是你听取他人的意见时,一定要心平气和,只有这样才能表示你在诚心听他说话。虽然被批评是很难受的,而且要明确表示你是真心在接受他们的批评。因为这样才能在失败中吸取教训,为以后的成功铺路。我们要学会从那里跌倒就从哪里爬起来,这才是我所应该做的。我也从工作中学习到了人际交往和待人处事的技巧。在人与人的交往中,我能看到自身的价值。人往往是很执着

32、的。可是如果你只问耕耘不问收获,那么你一定会交得到很多朋友。对待朋友,切不可斤斤计较,不可强求对方付出与你对等的真情,要知道给予比获得更令人开心。不论做是事情,都必须有主动性和积极性,对成功要有信心,要学会和周围的人沟通思想、关心别人、支持别人。打工的日子,有喜有忧,有欢乐,也有苦累,也许这就是打工生活的全部吧。 我不知道多少打工的人有过这种感觉, 但总的来说,这次的打工生活是我人生中迈向社会的重要一步,是值得回忆的。15现在想来,二十四天的打工生活,我收获还是蛮大的。我所学到的生活的道理是我在学校里无法体会的,这也算是我的一分财富吧。现今,在人才市场上大学生已不是什么”抢手货“ , 而在每个用人单位的招聘条件中,几乎都要求有工作经验。所以,大学生不仅仅要有理论知识,工作经验的积累对将来找工作也同样重要。事情很简单,同等学历去应聘一份工作,公司当然更看重个人的相关工作经验。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论