ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:31KB ,
资源ID:8717313      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8717313.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(类和对象的定义和使用.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

类和对象的定义和使用.docx

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

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

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

4、;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 Time &ob) Hour=ob.Hour; Minute

5、=ob.Minute; Second=ob.Second;Time:Time()void Time:ChangeTime(int h,int m,int s) Hour=h; Minute=m; Second=s;int Time:GetHour() return Hour;int Time:GetMinute() return Minute;int Time:GetSecond() return Second;void Time:PrintTime() coutHour: Minute: Secondendl;void Time:IncreaseOneSecond() Second+;/*v

6、oid Time:f(Time t) t.PrintTime(); coutcall fn;*/int main() Time a; Time b(13); Time c(13,15); Time d(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); couta.GetHour():a.GetMinute():a.

7、GetSecond()endl; coutb.GetHour():b.GetMinute():b.GetSecond()endl; coutc.GetHour():c.GetMinute():c.GetSecond()endl; coutd.GetHour():d.GetMinute():d.GetSecond()endl; return 0;程序的运行结果是:0: 0: 013: 0: 013: 15: 013: 15: 4512:15:4512:15:4512:15:4512:15:45Press any key to continue 构造函数与析构函数的调用方式及执行顺序是:先是构造函

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

9、+; else if(Second=59&Minute59&Hour23) Minute+; Second=0; Hour+; coutHour:Minute:Secondendl; 主函数中定义一个Time类对象并调用一次f函数,观察结果填写下表: f函数的原型主函数中调用f的语句构造函数调用次数拷贝构造函数调用次数析构函数调用次数void f(Time t);F(t0)112void f(Time &t);F(t0)101void f(Time *t);F(p)101 通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结

10、论?实 验 报 告实验题目(2) 定义一个Girl类和一个Boy类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。根据要求定义相应的类。将Girl类作为Boy类的友元类,在Girl类的成员函数VisitBoy(Boy & )中访问Boy类的私有成员,观察程序运行结果。在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,观察编译器给出的错误信息,理解原因。主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。再将Boy类作为Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl

11、 & )中访问Girl类的私有成员,观察编译器给出的信息。删除两个类中的函数VisitGirl(Girl & ) ,VisitBoy(Boy & ),定义一个顶层函数VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。实验解答:定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息。源程序代码如下:#includeusing namespace std;class Boy;class Girlpublic: char name25; int age; Girl(char N,int A=19); Girl(); void

12、 print(); void VisitBoy(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;Boy:Boy()void Boy:print() coutBoy: name ageendl;Girl:Girl(char N,int A) strcpy(name,N); age=A;Girl:Girl() void Girl:print() coutGir

13、l: name ageendl;void Girl:VisitBoy(Boy & boy) coutBoys name: boy.nameendl; coutBoys age: boy.ageendl;int main() Boy a(xpx,19); Girl b(lala,19); b.VisitBoy(a); a.print(); b.print(); return 0;实 验 报 告程序的运行结果是:Boys name: xpxBoys age: 19Boy: xpx 19Girl: lala 19Press any key to continue将Girl类作为Boy类的友元类, 写

14、出Girl类的成员函数VisitBoy(Boy & )的实现代码。void Girl:VisitBoy(Boy & boy) coutBoys name: boy.nameendl; coutBoys age: boy.ageendl;实 验 报 告在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,记录编译器给出的错误信息,与对比,你能得出友元的什么特性?友元关系是单向的,不具有交换性在上面代码的基础上,在Girl类的定义中,增加一行代码:friend Boy; 在主函数中通过Boy类对象. VisitGirl(Girl类对象) 的形式输出Girl类对象

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

16、s name: JackBoys age: 22Girls name: MaryGirls age: 20实 验 报 告定义一个顶层函数void VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函数的代码。void VisitBoyGirl(Boy &boy, Girl &girl) coutGirls name: girl.nameendl; coutGirls age: girl.ageendl; coutBoys name: boy.nameendl; coutBoys age:

17、 boy.ageendl;VisitBoyGirl(B2, G1);实 验 报 告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中不改变main()函数中的对象的定义方式,若取消构造函数中参数的默认值,编译程序错误提示信息及出错原因是:D:Microsoft Visual StudioMyProjects实验一Time.cpp|7|error: no matching function for call to Time:Time()|D:Microsoft Visual StudioMyProjects实验一Time.cpp|8|error: no matching

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

19、Time()|D:Microsoft Visual StudioMyProjects实验一Time.cpp|8|error: no matching function for call to Time:Time(int)|D:Microsoft Visual StudioMyProjects实验一Time.cpp|9|error: no matching function for call to Time:Time(int, int)| D:Microsoft VisualStudioMyProjects实验一Time.cpp|10|error: no matching function fo

20、r call to Time:Time(int, int, int)|构造函数实参不正确3.在题目(1)中恢复成的正确状态,如果将main()函数中的输出语句改为:cout对象名.Hour:对象名.Minute:对象名.Secondendl; 重新编译,会出现什么错误提示?在这种情况下,如果将成员变量的访问属性修改为public再编译,结果如何?D:Microsoft Visual StudioMyProjects实验一Time.h|17|error: int Time:Hour is private|D:Microsoft Visual StudioMyProjects实验一Time.cpp

21、|17|error: within this context|D:Microsoft Visual StudioMyProjects实验一Time.cpp|17|error: t4.Time:Hour cannot be used as a function|D:Microsoft Visual StudioMyProjects实验一Time.h|17|error: int Time:Minute is private|D:Microsoft Visual StudioMyProjects实验一Time.cpp|17|error: within this context|D:Microsoft

22、 Visual StudioMyProjects实验一Time.cpp|17|error: t4.Time:Minute cannot be used as a function|D:Microsoft Visual StudioMyProjects实验一Time.h|17|error: int Time:Second is private|D:Microsoft Visual StudioMyProjects实验一Time.cpp|17|error: within this context|D:Microsoft Visual StudioMyProjects实验一Time.cpp|17|error: t4.Time:Second cannot be used as a function|5.心得体会:1,注意向前引用。,2,要注意构造函数的用法。3,友元可以提高效率,方便编程。但会破坏类的整体操作性和封装性。五、指导教师评语成 绩批阅人日 期

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1