版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、苗U瑯遂/著实验报告(2016 / 2017 学年第二学期)课程名称面向对象程序设计及C+实验名称实验时间实验一:类和对象的定义及使用2017年3月25日指导单位光电工程学院指导教师陈景强学生姓名班级学号学院(系)专业实验报告实验名称类和对象的定义及使用指导教师实验类型验证实验学时2实验时间一、实验目的和要求(1)掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的 工作机制。(2)正确掌握类的不同属性成员的使用方法。(3)掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。(4)掌握友元函数和友元类的定义和使用。(5)基本掌握指针和引用作为函数参数的应用。二、实验
2、环境(实验设备)硬件:微型计算机软件:Microsoft Visual C+6.0二、实验原理及内容实验题目(1)定义一个时间类Time,有二个私有成员变量 Hour、Mi nute、Seco nd,定 义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义 时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。 按要求完成类的定义与实现。 修改数据成员的访问方式,观察编译结果。 在Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。 定义一个普通函数。void f(Time t)t. Pri
3、n tTime();在Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分 析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为t- Prin tTime( );,主函数中调用,再分析此时调用构造函数和析构函数的次数。实验报告参考实验教材中相应的实验提示部分按要求完成程序,并回答相关问题 要求完成后的源程序代码如下:#in cludeusing n amespace std;class Time private:int Hour,M inu te,Sec ond;public:Time(i nt
4、 h=0,i nt m=0,i nt s=0);Time(co nst Time & ob);Time();void Chan geTime(i nt h,i nt m,i nt s);int GetHour();int GetMi nute();int GetSeco nd();void Prin tTime();void In crease On eSec on d();Time:Time(int h,int m,int s)Hour=h;Minu te=m;Secon d=s; Time:Time(c onst Time & ob)Hour=ob.Hour;Min ute=ob.Mi n
5、ute;Secon d=ob.Sec ond;Time:Time()void Time:Cha ngeTime(i nt h,i nt m,i nt s)Hour=h;Minu te=m;Secon d=s;int Time:GetHour()return Hour;int Time:GetMi nu te()return Min ute;int Time:GetSec on d()retur n Sec ond;void Time:Pri ntTime()coutHour: Minu te: Sec on de ndl;void Time:I ncrease On eSec on d()Se
6、cond+;/*void Time:f(Time t)t.Pri ntTime();coutcall fn;*/int mai n()Time a;Time b(13);Time c(13,15);Time d(13,15,45);a. Pri ntTime();b. Pri ntTime();c. Pri ntTime();d. Pri ntTime();a. Cha ngeTime(12,15,45);b. Cha ngeTime(12,15,45);c. Cha ngeTime(12,15,45);d. Cha ngeTime(12,15,45);coutva.GetHour()vv:v
7、a.GetMi nu te():a.GetSeco nd()e ndl; coutvb.GetHour()vv:vb.GetMi nu te():b.GetSeco nd()e ndl; coutc.GetHour():c.GetMi nute()vv:vc.GetSeco nd()e ndl; coutd.GetHour():d.GetMi nu te():d.GetSeco nd()e ndl; return 0;程序的运行结果是:0: 0: 013: 0: 013: 15: 013: 15: 4512:15:4512:15:4512:15:4512:15:45Press any key
8、to con ti nue构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数。调用方式是自动调用,执行顺序是先执行构造函数, 待程序结束时再执行 析构函数。 取消类中成员函数In creaceO neSec ond(的注释标志,将该函数补充完整,注意时间在增 加一秒情况下的进位关系。该函数的代码如下:void Time:l ncrease On eSec on d()if(Seco nd59)Second+;else if(Seco nd=59&Mi nute=59&Hour=23)Hour=0;Min ute=O;Secon d=0;else if(Sec on d=59&
9、Minu te=59&Hour23)Min ute=0;Secon d=0;Hour+;else if(Seco nd=59&Min ute59&Hour23)Minu te+;Secon d=0;Hour+;coutHour: Minu te:Sec on de ndl; 主函数中定义一个Time类对象并调用一次f函数,观察结果填写下表:f函数的原型主函数中调用f 的语句构造函数 调用次数拷贝构造函数 调用次数析构函数 调用次数void f(Time t);F(t0)112void f(Time & t);F(t0)101void f(Time *t);JE(P)101通过以上结果,关于对象
10、作形式参数、对象引用作形式参数、对象指针作形式参数时构 造函数、析构函数的调用次数及顺序,你得到什么结论?实验题目(2)定义一个Girl类和一个Boy类,这两个类中都有表示姓名、年龄的私有 成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。 根据要求定义相应的类。 将Girl类作为Boy类的友元类,在Girl类的成员函数VisitBoy(Boy & )中访问 Boy类的私有成员,观察程序运行结果。 在Boy类的某成员函数VisitGirl(Girl & ) 中试图访问Girl类的私有成员,观 察编译器给出的错误信息,理解原因。 主函数中正确定义两个类的对象,调用各自的成员函
11、数实现相应功能。 再将Boy类作为Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl & ) 中访问Girl类的私有成员,观察编译器给出的信息。 删除两个类中的函数 VisitGirl(Girl & ), VisitBoy(Boy & ),定义一个顶层函数VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。实验解答: 定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息。 源程序代码如下:#in cludeusing n amespace std;class Boy;class Girlpublic
12、:char n ame25;int age;Girl(char N,i nt A=19);Girl();void prin t();void VisitBoy(Boy &);class Boypublic:char n ame25;int age;Boy(char N,i nt A=19);Boy();void prin t();frie nd Girl;Boy:Boy(char N,int A)strcpy( name,N);age=A;LBoy:Boy()void Boy:pri nt()coutBoy: n ame agee ndl;Girl:Girl(char N,int A)strc
13、py( name,N);age=A;Girl:Girl()void Girl:pri nt()coutGirl: n ame agee ndl;void Girl:VisitBoy(Boy & boy)coutBoys n ame: bo y.n amee ndl; coutBoys age: boy.agee ndl;int mai n()Boy a(xpx,19);Girl b(lala,19);b.VisitBoy(a);a. pri nt();b. pri nt();return 0;实验报告程序的运行结果是:Boys n ame: xpxBoys age: 19Boy: xpx 19
14、Girl: lala 19Press any key to con ti nue 将Girl类作为Boy类的友元类,写出Girl类的成员函数VisitBoy(Boy & )的实现代码。void Girl:VisitBoy(Boy & boy)coutBoys n ame: bo y.n amee ndl;coutBoys age: boy.agee ndl;实验报告 在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,记录编译器 给出的错误信息,与对比,你能得出友元的什么特性?友元关系是单向的,不具有交换性 在上面代码的基础上,在 Girl类的定义中,增加
15、一行代码:friend Boy;在主函数中 通过Boy类对象.VisitGirl(Girl类对象)的形式输出Girl类对象的信息。编译的结果是? 写出这一步你的主函数代码,要求分别用友元函数Girl类对象.VisitBoy(Boy类对象);和Boy类对象.VisitGirl(Girl类对象);和输出两个类对象的信息。D:Microsoft Visual实验二 exp3_1.cpp|14|error: novoid Girl:VisitBoy(Boy&) member function declared in class、Girl|G1.VisitBoy(B2);B2.VisitGirl(G1)
16、;输出:Girl con struct ingBoy con struct ingBoys n ame: JackBoys age: 22Girls n ame: MaryGirls age: 20实验报告 定义一个顶层函数void VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元函数,主函 数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函数 的代码。void VisitBoyGirl(Boy & boy, Girl &girl)coutGirls n ame: girl. namee ndl; coutGirls age: vvgirl.
17、agevve ndl;coutBoys n ame: bo y.n amee ndl; coutBoys age: boy.agee ndl;yisitBoyGirl(B2,_ G1);实验报告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中不改变main()函数中的对象的定义方式,若取消构造函数中参数 的默认值,编译程序错误提示信息及出错原因是:D:Microsoft Visual function for call to Time:Time()|D:Microsoft Visual function for call to Time:Time(int)D:Mic
18、rosoft Visual实验一 Time.cpp|7|error:no matching实验一 Time.cpp|8|error:no matchingI实验一 Time.cpp|9|error:no matchingfun ctio n for call to Time:Time(i nt, i nt)| 函数二义性2.在题目(1)中如果删除类中自定义的构造函数,仅使用系统默认构造函数,再 编译,程序错误提示信息及出错原因是:D:Microsoft Visual实验-一 Time.cpp|7|error:no match ingfunction for call to Time:Time(
19、)|D:Microsoft Visual实验-一 Time.cpp|8|error:no match ingfunction for call to Time:Time(int)ID:Microsoft Visual实验-一 Time.cpp|9|error:no match ingfun ctio n for call to Time:Time(i nt, i nt)|D:Microsoft实验一Time.cpp|10|error:no match ingfunction for call to Time:Time(int, int, int)| 构造函数实参不正确3.在题目(1)中恢复成的正确状态,如果将main()函数中的输出语句改为:cout对象名.Hour: 对象名.Minutev:v 对象名.Secondendl;重新编译,会 出现什么错误提示?在这种情况下,如果将成员变量的访问属性修改为public再编译,结果如何
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店前台接待员工作总结
- 高校教研工作的持续改进与创新
- 金融科技行业技术职位总结
- 互娱行业花絮分享培训心得
- 有效规划财务部年终工作总结
- 人机界面设计师界面设计交互设计
- 高危行业安全监管工作方案计划
- 设备维修维护合同范本完整版
- 司法行业审判培训
- 服装店前台接待工作总结
- 部编版2024-2025学年三年级上册语文期末测试卷(含答案)
- 研发部年终总结(33篇)
- 一年级数学计算题专项练习1000题集锦
- 2024年高考物理模拟卷(山东卷专用)(考试版)
- 湖北省武汉市青山区2022-2023学年五年级上学期数学期末试卷(含答案)
- 2024年安徽省高校分类对口招生考试数学试卷真题
- 《入侵检测与防御原理及实践(微课版)》全套教学课件
- IT企业安全生产管理制度范本
- 工业传感器行业市场调研分析报告
- 2024电影数字节目管理中心招聘历年高频难、易错点练习500题附带答案详解
- 小学生心理健康讲座5
评论
0/150
提交评论