还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验报告(学年第二学期)面向对象程序设计及C++实验一类和对象的定义及使用年3月垄日物联网学院Boy:〜Boy.voidBoy:printcout«/zBoy:H«namezageend1;.Girl:GirlcharN[]intAstrcpynameN;age=A;}Girl::〜Girl.voidGir1::print{.coutVGir1:Vnameage«endl;.voidGirl::VisitBoyBoyboycosname:“boy.name«end1;cout«/zBoysage:Xboy.age〈end1;intmain{.Boyaxpx”19;Girlblaia”19;b.VisitBoya;printprint;return0;.实验报告程序的运营结果是BoysnamexpxBoysage:19Boy:xpx19Girl1ala19PressanykeytocontinueL.T\人人人人UBoysname xpxBoysage19Boy xpx19Girl lala19Pressanykeytocontinue
②将Girl类作为Boy类的友元类,写出Girl类的成员函数VisitBoyBoy的实现代码voidGirl:VisitBoyBoyboycoutnBoysname:boy.name«endl;coutnBoysage nboy.age«endl;实验报告
③在Boy类的某成员函数VisitGirlGirl中试图访问Girl类的私有成员,记录编译器给出的错误信息,与
②对比你能得出友元的什么特性?友元关系是单向的不具有互换性
④在上面代码的基础上,在Girl类的定义中,增长一行代码:friendBoy;在主函数中通过Boy类对象.VisitGir1Gir1类对象的形式输出Girl类对象的信息编译的结果是写出这一步你的主函数代码,规定分别用友元函数Gir1类对象.VisitBoyBoy类对象;和Boy类对象.VisitGir1Gir1类对象;和输出两个类对象的信息D:\MicrosoftVisua1Studio\MyProjects\实验二\exp3_Lcpp|14|error novoidGir1:VisitBoyBoymemberfunctiondeciaredinclassGiiT|Gl.VisitBoyB2;B
2.VisitGir1G1;输出GirlconstructingBoyconstruetingBoy,sname:JackBoysage22Girlsname MaryGirrsage:20实验报告
⑤定义一个顶层函数voidVisitBoyGirlBoyGirl作为以上两个类的友元函数,主函数中通过调用该函数输出男孩和女孩的信息写出该友元函数的完整代码,以及主函数的代码voidVisitBoyGirlBoyboyGir1girlcout«/zGirrsname:^«girl.nameendl;cout«/zGirl,sage:^girl.age«endl;cout«/zBoyzsname:«boy・name«endl;coutBoysage:〈〈boy.ageVVendl;.VisitBoyGirlB2Gl;实验报告
四、实验小结涉及问题和解决方法、心得体会、意见与建议等L在题目1中
②不改变main函数中的对象的定义方式,若取消构造函数中参数的默认值编译程序错误提醒信息及犯错因素是D\MicrosoftVisua1Studio\MyProjects、实验一\Time.cpp|7|error nomatchingfunctionforca11toTime:TimeO,|D\MicrosoftVisua1StudioMyProjects\实验一\Time.cpp181error:nomatchingfunctionforcalltoTimeTimeintfD:\MicrosoftVisualStudio\MyProjects\实验一\Time.cpp|9|error:nomatchingfunotionforcal1toTime:TimeintintI函数二义性.在题目1中
③假如删除类中自定义的构造函数仅使用系统默认构造函数,再编译,程序错误提醒信息及犯错因素是D:\MicrosoftVisua1Studio\MyProjects\实验一\Timecpp171error:nomatchingfunctionforcalltoTime:Time7|D\MicrosoftVisualStudio\MyProjects\实验一Timecpp⑻error:nomatehingfunctionforcalltoTime:TimeintID\MicrosoftVisualStudio\MyProjects、实验一Tiine.cpp|9|error nomatchingfunctionforcalltoTime::TimeintintID\MicrosoftVisua1Studio\MyProjects\实验一\Time.cpp|10|error:nomatchingfunctionforca11toTime:Timeintintint|构造函数实参不对的.在题目1中
④恢复成
①的对的状态,假如将main函数中的输出语句改为:cou〈对象名.Hour:〃〈对象名.Minute〃”对象名.Secondend1;重新编译,会出现什么错误提醒?在这种情况下,假如将成员变量的访问属性修改为Pub1ic再编译,结果如何?D\MicrosoftVisua1Studio\MyProjects\实验一\Time.hI17|error:intTime:Hourisprivate|D:\MicrosoftVisua1Studio\MyProjects实验一\Time.cppI17Ierror:withinthiscontextID:\MicrosoftVisualStudio\MyProjects\实验一\Time.cpp117Ierror:t
4.Time:Hourcannotbeusedasafunction|D:\MierosoftVisua1Studio\MyProjects\实验一\Time.h|17|error:intTime:Minuteisprivate|.D\MicrosoftVisua1Studio\MyProjects\实验一\Time.cppI171error:withinthiscontext|.D:\MicrosoftVisualStudio\MyProjects\实验一\TimecppI171error:t
4.TimeMinutecannotbeusedasafunction|D:\MicrosoftVisualStudio\MyProjects、实验一\Time.h|171error:、intTime:Secondisprivate|D:\MicrosoftVisualStudio\MyProjects\实验一k\Time.cpp|171error:withinthiscontext|D:\MicrosoftVisualStudio\MyProjects\实验一\Time.cppI17|error:t4・Time::Secondcannotbeusedasafunction|
5.心得体会1注意向前引用,2要注意构造函数的用法3友元可以提高效率,方便编程但会破坏类的整体操作性和封装性
五、指导教师评语成绩批阅人实验报告数中调用,再分析此时调用构造函数和析构函数的次数实验报告参考实验教材中相应的实验提醒部分按规定完毕程序,并回答相关问题规定
①完毕后的源程序代码如下Wincludeiostreamusingnamespacestd;c1assTimeprivate:.intHourMinuteSecond;pub1ic:^Timeinth=0intm=0ints=0;,TimeconstTimeob;吁Time;ovoidChangeTimeinthintmints;ointGetHour;intGetMinute;nntGetSecond;ovoidPrintTime;ovoidIncrease0neSecond;;Time::TimeinthintmintsHour=hMinute=m;Second=s;Time::TimeconstTimeobHour=ob.Hour;Minute=ob.Minute;Second=ob.Second;Time:〜TimevoidTime:ChangeTimeinthintmintsHour=h;Minute=m;Second=s;.intTimeGetHourreturnHour;intTime::GetMinutereturnMinute;intTime::GetSecondreturnSecond;voidTime::PrintTimecout«Hour:Minute〈V:Secondendl;voidTime::IncreaseOneSecondSecond++;AvoidTime::fTimett.PrintTimeO;cout«ncallf\n〃;}*/intmainTimea;.Timeb13;Timec1315;Timed131545;.a.PrintTime;b.PrintTime;c・PrintTime;d.PrintTime;ChangeTime121545;ChangeTime121545;ChangeTime121545;d.ChangeTime121545;coutVVa.GetHour:a・GetMinute〈V:Va.GetSecond«endl;cout«b.GetHour^z/«b.GetMinutezz/zb.GetSecondendl;coutc.GetHour c.GetMinute:c.GetSecondend1;cout«d.GetHourz,/z«d.GetMinute«n:d.GetSecondend1;return0;.程序的运营结果是00:013:0:01315:013:15:451215:4512:154515:4512:15:45Pressanykeytocontinue•E:\C++
6.0\B14070519\Debug\^g—exel口IU_里一1构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数调用方式是自动调用执行顺序是先执行构造函数,待程序结束时再执行析构函数实验报告
③取消类中成员函数IncreaceOneSecond的注释标志为该函数补充完整,注意时间在增长一秒情况下的进位关系该函数的代码如下voidTime::IncreaseOneSecondifSecond59Second++;e1seifSecond==59Minute==59Hour==23Hour=0;Minute=0;Second=0;}elseifSecond==59Minute==59Hour23Minute=0;Second=0;Hour++;}elseifSecond==59Minute59Hour23Minute++;Second=0;Hour++;coutHour:/zMinuteZZ Z«Secondendl;.
④主函数中定义一个Time类对象并调用一次f函数,观测结果填写下表:通过以上结果,关于对象作形式参数、对象引用作形式参数、对象指针作形式参数时构造函数、析构函数的调用次数及顺序,你得到什么结论?.实验报告实验题目2定义一个Gir1类和一个Boy类,这两个类中都有表达姓名、年龄的私有成员变量,都要定义构造函数、析构函数、输出成员变量信息的公有成员函数
①根据规定定义相应的类
②将Girl类作为Boy类的友元类,在Gir1类的成员函数VisitBoyBoy中访问Boy类的私有成员,观测程序运营结果
③在Boy类的某成员函数VisitGir1Girl中试图访问Gir1类的私有成员观测编译器给出的错误信息理解因素
④主函数中对的定义两个类的对象,调用各自的成员函数实现相应功能
⑤再将Boy类作为Girl类的友元类在Boy类的某成员函数VisitGirlGir1中访问Girl类的私有成员,观测编译器给出的信息
⑥删除两个类中的函数VisitGirlGirlVisitBoyBoy定义一个顶层函数VisitBoyGir1BoyGir1作为以上两个类的友元通过调用该函数输出男孩和女孩的信息实验解答
①定义相应的类,主函数中定义相应的类成员,调用各类的输出函数显示信息源程序代码如下#inc1udeiostreamusingnamespacestd;classBoy;classGirlpublic charname
[25];aintage;oGirlcharN[]intA=19;~Girl;dvoidprint;voidVisitBoyBoy;};classBoypublie:.charname
[25];intage;BoycharN[]intA=19;Boy;voidprint;,friendGirl;;Boy::BoycharN[]intAstrcpynameN;age=A;.实验名称类和对象的定义及使用指导教师肖学中实验类型验证实验学时2实验时间3月20日
一、实验目的和规定1掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的工作机制2对的掌握类的不同属性成员的使用方法3掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程4掌握友元函数和友元类的定义和使用5基本掌握指针和引用作为函数参数的应用
二、实验环境实验设备硬件微型计算机软件MicrosoftVisua1C++
6.0
三、实验原理及内容实验题目1定义一个时间类Time有三个私有成员变量Hour、Minute、Second定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完毕时间的设定、改变、获取、输出等功能
①按规定完毕类的定义与实现修改数据成员的访问方式,观测编译结果在Time类中定义一个成员函数用于实现时间增长一秒的功能,主函数中通过对象调用该函数,并输出增长一秒后的时间信息
④定义一个普通函数voidfTimett.PrintTime;}在Time类中增长拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数涉及拷贝构造函数和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数此时函数代码修改为{t-PrintTime;}主函f函数的原型主函数中调用f的语句构造函数调用次数拷贝构造函数调用次数析构函数调用次数voidfTimet;FtO112voidfTimet;FtO101voidfTime*t;Fp101。