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

下载本文档

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

文档简介

实 验 报 告( 2014 / 2015 学年 第 二 学期)课程名称 面向对象程序设计及C+实验名称实验一: 类和对象的定义及使用实验时间2015年3月25日指导单位物联网学院指导教师肖学中学生姓名张殷虔班级学号B14070519学院(系)物联网学院专 业物联网工程实 验 报 告实验名称类和对象的定义及使用 指导教师肖学中实验类型验证 实验学时2 实验时间3月20日一、 实验目的和要求(1)掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的工作机制。(2)正确掌握类的不同属性成员的使用方法。(3)掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。(4)掌握友元函数和友元类的定义和使用。(5)基本掌握指针和引用作为函数参数的应用。二、实验环境(实验设备) 硬件: 微型计算机 软件: Microsoft Visual C+6.0三、实验原理及内容 实验题目(1)定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。 按要求完成类的定义与实现。 修改数据成员的访问方式,观察编译结果。 在Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。 定义一个普通函数。void f(Time t) t. PrintTime( );在Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为t- PrintTime( );,主函数中调用,再分析此时调用构造函数和析构函数的次数。实 验 报 告参考实验教材中相应的实验提示部分按要求完成程序,并回答相关问题。要求完成后的源程序代码如下:#includeusing namespace std;class 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 Time &ob) Hour=ob.Hour; Minute=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+;/*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(); 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.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 构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数。调用方式是自动调用,执行顺序是先执行构造函数,待程序结束时再执行析构函数。 实 验 报 告取消类中成员函数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+; 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 通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结论?实 验 报 告实验题目(2) 定义一个Girl类和一个Boy类,这两个类中都有表示姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数。根据要求定义相应的类。将Girl类作为Boy类的友元类,在Girl类的成员函数VisitBoy(Boy & )中访问Boy类的私有成员,观察程序运行结果。在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,观察编译器给出的错误信息,理解原因。主函数中正确定义两个类的对象,调用各自的成员函数实现相应功能。再将Boy类作为Girl类的友元类,在Boy类的某成员函数VisitGirl(Girl & )中访问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 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() coutGirl: name ageendl;void Girl:VisitBoy(Boy & boy) coutBoys name: endl; 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类的友元类, 写出Girl类的成员函数VisitBoy(Boy & )的实现代码。void Girl:VisitBoy(Boy & boy) coutBoys name: endl; coutBoys age: boy.ageendl;实 验 报 告 在Boy类的某成员函数VisitGirl(Girl & )中试图访问Girl类的私有成员,记录编译器给出的错误信息,与对比,你能得出友元的什么特性?友元关系是单向的,不具有交换性在上面代码的基础上,在Girl类的定义中,增加一行代码:friend Boy; 在主函数中通过Boy类对象. VisitGirl(Girl类对象) 的形式输出Girl类对象的信息。编译的结果是?写出这一步你的主函数代码,要求分别用友元函数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 constructingBoys name: JackBoys age: 22Girls name: MaryGirls age: 20实 验 报 告定义一个顶层函数void VisitBoyGirl(Boy &, Girl &),作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息。写出该友元函数的完整代码,以及主函数的代码。void VisitBoyGirl(Boy &boy, Girl &girl) coutGirls name: endl; coutGirls age: girl.ageendl; coutBoys name: endl; coutBoys age: 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 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: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 for 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|17|error: within this context|D:Microsoft Visual StudioM

温馨提示

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

评论

0/150

提交评论