2022年2022年类和对象的定义和使用 .pdf

上传人:C****o 文档编号:39884664 上传时间:2022-09-08 格式:PDF 页数:12 大小:187KB
返回 下载 相关 举报
2022年2022年类和对象的定义和使用 .pdf_第1页
第1页 / 共12页
2022年2022年类和对象的定义和使用 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年2022年类和对象的定义和使用 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年类和对象的定义和使用 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实 验 报 告(2016/2017 学年第 二 学期)课程名称面向对象程序设计及C+实验名称实验一:类和对象的定义及使用实验时间2017 年3 月25 日指导单位光电工程学院指导教师陈景强学生姓名班级学号学院(系)专业名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -1 实 验 报 告实验名称类和对象的定义及使用指导教师实验类型验证实验学时2 实验时间一、实验目的和要求(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();,主函数中调用,再分析此时调用构造函数和析构函数的次数。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -2 实 验 报 告参考实验教材中相应的实验提示部分按要求完成程序,并回答相关问题。要求完成后的源程序代码如下:#include using na

4、mespace std;class Time private: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:T

5、ime(const Time&ob)Hour=ob.Hour;Minute=ob.Minute;Second=ob.Second;Time:Time()void Time:ChangeTime(int h,int m,int s)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -3 Hour=h;Minute=m;Second=s;int Time:GetHour()return Hour;int Time:GetMinute()return Minute;int Time:GetSecond()return Second;void Time:PrintTime()co

6、utHour:Minute:Secondendl;void Time:IncreaseOneSecond()Second+;/*void 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();名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -4 c.PrintTime();d.PrintTime();a.ChangeTime(12,15,45);b.ChangeTime

7、(12,15,45);c.ChangeTime(12,15,45);d.ChangeTime(12,15,45);couta.GetHour():a.GetMinute():a.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:0 13:0:0 13:15:0 13:15:45 12:

8、15:45 12:15:45 12:15:45 12:15:45 Press any key to continue构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数。调用方式是自动调用,执行顺序是先执行构造函数,待程序结束时再执行析构函数。实 验 报 告名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -5 取消类中成员函数IncreaceOneSecond()的注释标志,将该函数补充完整,注意时间在增加一秒情况下的进位关系。该函数的代码如下:void Time:IncreaseOneSecond()if(Second59)Second+;else i

9、f(Second=59&Minute=59&Hour=23)Hour=0;Minute=0;Second=0;else if(Second=59&Minute=59&Hour23)Minute=0;Second=0;Hour+;else if(Second=59&Minute59&Hour23)Minute+;Second=0;Hour+;coutHour:Minute:Secondendl;主函数中定义一个Time类对象并调用一次f 函数,观察结果填写下表:f 函数的原型主函数中调用 f的语句构造函数调用次数拷贝构造函数调用次数析构函数调用次数void f(Time t);F(t0)112v

10、oid f(Time&t);F(t0)101void f(Time*t);F(p)101通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结论?实 验 报 告名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -6 实验题目(2)定义一个 Girl类和一个 Boy类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。根据要求定义相应的类。将 Girl类作为 Boy类的友元类,在 Girl类的成员函数 VisitBoy(Boy&)中访问Boy类的私有成员

11、,观察程序运行结果。在 Boy类的某成员函数 VisitGirl(Girl&)中试图访问 Girl类的私有成员,观察编译器给出的错误信息,理解原因。主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。再将 Boy类作为 Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl&)中访问 Girl类的私有成员,观察编译器给出的信息。删除两个类中的函数VisitGirl(Girl&),VisitBoy(Boy&),定义一个顶层函数 VisitBoyGirl(Boy&,Girl&),作为以上两个类的友元,通过调用该函数输出男孩和女孩的信息。实验解答:定义相应的类,主函数中定义

12、相应的类成员,调用各类的输出函数显示信息。源程序代码如下:#include using namespace std;class Boy;class Girl public:char name25;int age;Girl(char N,int A=19);Girl();void print();void VisitBoy(Boy&);class Boy public: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;名

13、师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 12 页 -7 Boy:Boy()void Boy:print()coutBoy:name ageendl;Girl:Girl(char N,int A)strcpy(name,N);age=A;Girl:Girl()void Girl:print()coutGirl: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.V

14、isitBoy(a);a.print();b.print();return 0;实 验 报 告名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -8 程序的运行结果是:Boys name:xpx Boys age:19 Boy:xpx 19 Girl:lala 19 Press any key to continue将 Girl 类作为 Boy 类的友元类,写出 Girl 类的成员函数 VisitBoy(Boy&)的实现代码。void Girl:VisitBoy(Boy&boy)coutBoys name:boy.nameendl;coutBoys age:boy.age

15、endl;实 验 报 告 在 Boy 类的某成员函数 VisitGirl(Girl&)中试图访问 Girl 类的私有成员,记录编译器给出的错误信息,与对比,你能得出友元的什么特性?友元关系是单向的,不具有交换性在上面代码的基础上,在Girl 类的定义中,增加一行代码:friend Boy;在主函数中通过 Boy类对象.VisitGirl(Girl 类对象)的形式输出 Girl 类对象的信息。编译的结果是?写出这一步你的主函数代码,要求分别用友元函数Girl 类对象.VisitBoy(Boy 类对象);和 Boy类对象.VisitGirl(Girl 类对象);和输出两个类对象的信息。D:Micr

16、osoft Visual 实 验 二 exp3_1.cpp|14|error:no void Girl:VisitBoy(Boy&)member function declared in class Girl|G1.VisitBoy(B2);B2.VisitGirl(G1);输出:Girl constructing 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 12 页 -9 Boy constructing Boys name:Jack Boys age:22 Girls name:Mary Girls age:20实 验 报 告定义一个顶层函数void VisitBoyGi

17、rl(Boy&,Girl&),作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函数的代码。void VisitBoyGirl(Boy&boy,Girl&girl)coutGirls name:girl.nameendl;coutGirls age:girl.ageendl;coutBoys name:boy.nameendl;coutBoys age:boy.ageendl;VisitBoyGirl(B2,G1);实 验 报 告名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 12 页 -10 四、实验小结(包括问题和解决方法

18、、心得体会、意见与建议等)1.在题目(1)中不改变 main()函数中的对象的定义方式,若取消构造函数中参数的默认值,编译程序错误提示信息及出错原因是:D:Microsoft Visual 实验一 Time.cpp|7|error:no matching function for call to Time:Time()|D:Microsoft Visual 实验一 Time.cpp|8|error:no matching function for call to Time:Time(int)|D:Microsoft Visual 实验一 Time.cpp|9|error:no matching

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

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

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

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

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁