实验1 类与对象

上传人:夏** 文档编号:496759593 上传时间:2023-01-27 格式:DOCX 页数:13 大小:20.20KB
返回 下载 相关 举报
实验1 类与对象_第1页
第1页 / 共13页
实验1 类与对象_第2页
第2页 / 共13页
实验1 类与对象_第3页
第3页 / 共13页
实验1 类与对象_第4页
第4页 / 共13页
实验1 类与对象_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《实验1 类与对象》由会员分享,可在线阅读,更多相关《实验1 类与对象(13页珍藏版)》请在金锄头文库上搜索。

1、西华大学实验报告(2010/ 2011 学年 第 二 学期)课程名称面向对象程序设计实验名称类与对象实验时间年月日指导单位指导教师学生姓名学院(系)班级学号专业实验报告实验名称类和对象的定义及使用实验类型验证实验学时2X2一、实验目的和要求(1) 掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的 工作机制。(2) 正确掌握类的不同属性成员的使用方法。(3) 掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。(4) 掌握友元函数和友元类的定义和使用。(5) 了解对象数组的定义、初始化方法与应用。(6) 基本掌握指针和引用作为函数参数的应用。二、实验环境(实验设备

2、)硬件:微型计算机软件:Microsof t Visual C+6.0三、实验原理及内容实验题目(1):定义一个时间类Time,有二个私有成员变量Hour、Minute、Second, 定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定 义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。实验解答:exp3_l.cpp的代码如下:#includeusing namespace std;class Time private:int Hour,M inut e,Second;public:Time(i nt h=0 ,int m=0 ,int n=0

3、)coutconstrueting.endl;Hour二h;Minute=m;Second=n;Time(const Time &ob)coutcopy construeting.endl;Hour=ob.Hour;Minute=ob.Minute;Second=ob.Second;Time()coutdestrueting.endl;ChangeTime(i nt h,i nt m,i nt s)Hour二h;Minute=m;Second=s;intGet Hour()return Hour;intGet Minu te()return Minute;int Get Second()voi

4、d Pri nt Time()return Second;cou t hour:Ge tHour();coutminute:GetMinute();coutsecond:GetSecond()endl;void main()Time time1;ti mel.Pri nt Time();ti mel.ChangeTime(4,28,12);ti mel.Pri nt Time();程序的运行结果是:Construetinghour:0hinute:0hecond:0hour:4hinute:28hecond:12Destrueting构造函数与析构函数的调用方式及执行顺序是:定义对象时系统自动

5、调用构造函数,在对象生存期结束时,系统自动调用析构函数,在任何情况下,析构函数的调用顺序与构造函数的调用顺序完全相反。 不改变main ()函数中的对象的定义方式,若取消构造函数中参数的默认值,请在 小结中记录编译程序错误提示信息并解释原因。 如果删除类中自定义的构造函数,仅使用系统默认构造函数,再编译,请在小结 中记录程序错误提示信息并解释原因。 恢复成的正确状态,如果将main ()函数中的输出语句改为:cout对象名.Hour:对象名.Minute:对象名.Secondendl;重新编译,会 出现什么错误提示?请在小结中记录程序错误提示信息并解释原因。在这种情况下,如 果将成员变量的访问

6、属性修改为public再编译,结果如何?在文件exp3_l.cpp中增加的void IncreaceOneSecond();函数的完整代码是: Void IncreaceOneSecond()Second+; 主函数中定义一个Time类对象并调用一次f函数,观察结果填写下表:f函数的原型主函数中调用f 的语句构造函数 调用次数拷贝构造函数 调用次数析构函数 调用次数void f(Time t);f(now)112void f(Time & t);f(now)101void f(Time *t);f(now)101通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构 造函

7、数、析构函数的调用次数及顺序,你得到什么结论?答:1对象作为形式参数,调用之初把实参的值复制给形参,函数体内形参的改变不会影响实际参数的值。2对象引用作为形式参数,相当于是实参的别名,实质上就是对实参对象行操作,所以他会改变实际参数的值。3对象指针作形式参数,不调用拷贝构造函数,通过指针不仅可以访问实参对象的值,还可以进行修改,调用的时候要以地址形式给出。实验题目(2):建立文件exp3_2.cpp,定义一个Girl类和一个Boy类,这两个类中都 有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公 有成员函数。实验解答:在exp3_2.cpp中定义相应的类,主函数

8、中定义相应的类成员,调用各类的输出函数显 示信息。源程序代码如下:#include#includeclass Girl;class Boy char *name;int age;Public: Boy(char * na,i nt a) name二new chars trlen(na)+l;st rcpy(name,na);age二a; Boy() dele te name; void Output。cout姓名:name 年龄:ageendl; ;class Girl char *name;int age;public: Girl(char * na,i nt a) name二new cha

9、rs trlen(na)+l; st rcpy(name,na); age=a; Girl() dele te name; void Output。cout姓名:name 年龄:ageendl; ;void main()Girl gg(韩梅梅,13);Boy bb(李磊,14);gg.O utput();bb.O utput();程序的运行结果是:姓名:韩梅梅年龄:13姓名:李磊年龄:14将Girl类作为Boy类的友元类,写出Girl类的成员函数VisitBoy(Boy & )的实现代 码。在类Boy定义中加语句“friend Girl”在类Girl定义中加成员函数:void VisitBoy

10、(Boy &b)cout姓名:b.name 年龄b.ageendl;在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,记录编译 器给出的错误信息,与对比,你能得出友元的什么特性?答:友元关系是单向性的,不具备交换性,只有两个类都将对方声明为自己的友元的时候,才能实现互访.在上面代码的基础上,在Girl类的定义中,增加一行代码:friend Boy;在主函 数中通过Boy类对象VisitGirl(Girl类对象)的形式输出Girl类对象的信息。编译的结 果是?写出这一步你的主函数代码,要求分别用友元函数Girl类对象VisitBoy(Boy类 对象);和B

11、oy类对象.VisitGirl(Girl类对象);和输出两个类对象的信息。姓名:韩梅梅年龄:13主函数:b.Visi tGirl(gg);姓名:李磊年龄:14主函数:g.Visi tBoy(bb);定义一个顶层函数void VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元函数,主 函数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函 数的代码。void visitboygirl(boy &b ,girl &g) cout姓名:b.name;cou t年龄:b.ageendl;cout姓名:g.name;cout年龄:g.ageendl; vo

12、id main()girl gg(韩梅梅,13); boy bb(李磊,14);visi tboygirl(b,g);实验报告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中不改变main ()函数中的对象的定义方式,若取消构造函数中参数 的默认值,编译程序错误提示信息及出错原因是:答: error C2512: Time : no appropriate default construetor available 本题中的构造函数是带形式参数的,这些形式参数不具有默认值,则定义对象时 必须给定相应的实际参数。2在题目(1)中如果删除类中自定义的构造函数,仅使用系统

13、默认构造函数,再 编译,程序错误提示信息及出错原因是:答: error C2512: Time : no appropriate default construetor available 系统对类提供一个不带形式参数的构造函数,但是,此时只负责为对象的各个数 据成员分配空间,而不提供初值。3在题目(1)中恢复成的正确状态,如果将main()函数中的输出语句改为: cout对象名.Hour:对象名.Minute:对象名.Secondendl;重新编译,会 出现什么错误提示?在这种情况下,如果将成员变量的访问属性修改为public再编译, 结果如何?答. :erro_C22482 J_Hour

14、: _cannot accessprivate_member dec_l_ared in .class Time error_C2248: J-Minute _:_cannotaccess private member declared_ln _class Time error_C2248: JSecond _:_cannotaccess .private member declared_in _class Time.4.其它问题及解决办法:答:在第二个题互相定义为友元类时,由于我把访问友元类的函数分别定义在类 内,造成了错误提示,最后改过来了。5.心得体会:答:很多知识点当时觉得懂了,在真正做题的时候发现自己什么都不懂,一直翻 书,做的直纠结啊,看来C+还是得上机实践啊。五、指导教师评语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号