《实验4 类中数据的共享与保护.docx》由会员分享,可在线阅读,更多相关《实验4 类中数据的共享与保护.docx(15页珍藏版)》请在优知文库上搜索。
1、实验4类中数据的共享与保护一、实验目的与实验要求(1)掌握友元的定义和应用。(2)掌握对象数组的定义、初始化方法及应用。(3)掌握指针和引用作为函数参数的应用。(4)掌握在类内定义静态数据成员以实现共享的基本方法,并根据需要定义相应的静态成员函数专门操作静态数据成员。(5)掌握类中常数据成员的定义及初始化方法,正确使用常数据成员。(6)理解常成员函数的意义以及常对象的意义,在程序中正确定义常对象,并正确调用相应的成员函数。二、实验内容1.编写一个程序,定义一个CimIe类,按下述内容要求定义相关的数据成员及成员函数,最后在主函数中输出各圆的半径及对应面积,并一次性输出平均面积。CirCle类中
2、定义4个数据成员:常数据成员PI代表圆周率,静态数据成员CoUm用于统计圆对象的个数,普通的double型数据成员r代表圆的半径,普通的double型数据成员area代表圆的面积,所有数据成员均定义为私有属性。再定义相关的成员函数,用于求单个圆的面积、输出圆的半径及面积、获取静态数据成员的值。主函数中以一维对象数组定义若干个圆类的对象,调用相应的函数,求面积,并输出每一个圆的半径及对应的面积,并且输出一次圆的个数。在CirCIe类中增加一个友元函数的声明,用来求所有圆面积的平均值,并实现该函数的代码,主函数中增加调用此函数的语句,输出所有圆面积的平均值。#includcusingnamespa
3、cestd;classCircle(constdoublePI;staticintcount;doubleRadius;public:Circle(doublcr):PI(3.l4)/Radius=newsizeof(r);Radius=r;count+;)doubleArea();doubleCircumferenceO;intGetmount();Circle():PI(3.l4)();doubleCircle:Area()returnPI*Radius*Radius;)doubleCircle:Circumference()returnRadius;)intCircle:Getmount
4、Oreturncount;)intCircle:zcount=0;intmain()/Circlecl(3),c2(4);/ofof/ofofdoubler;Circlec2=CircIe(3),Circle(4);/intcount=0;for(inti=0;ir;Circle(r);/ciJ.Circle:Area();/CircleArea();/CiecleCircumferenceO;/Circlecl;ofofreturnO;2.程序改错,请修改下列程序,尽量减少增行或者减行,使程序的运行结果如下:ThenumberofallThenumberofallThenumberofall
5、ThenumberofallThenumberofallstudents:0students:1students:0students:2students:2要求:类中的数据成员连同访问属性均不可以修改。错误程序源代码如下:classStudentprivate:charname20;Staticinttotal;用来统计学生总人数public:Student()total+;Student()staticintGetTotal(););staticintStudent:total=0;strcpy(name,p);total+;)staticintStudent:GetTota1()(retu
6、rntotal;)intmain()deletep;Students2;returnO;classStudentprivate:charnamel20;staticinttotal;public:Student()(total+;Student()(total-;)SstaticinGtetTotal();;intStudentzlotaI=O;Student:Student(char*p)strcpy(name,p);total+;)intStudent:GetTotalOreturntotal;)intmain()(cSdeletep:Students2:returnO;3.设H一个Sco
7、re类,该结构有两个数据成员,分别为整型的homjteam(主队)和叩Ponent(客队)。用SCore类定义一个含有5个元素的game数组,用于记录一个球队全部5场比赛的每场比分。定义相关的构造函数,初始比分均为0:0,Seto函数用于修改每场比分,GelHometeam()函数用于提取主队的比分,Getpponent()函数用丁提取客队的比分。Display()用于显示比分情况,输出形如55:66。定义对象数组game,并初始化对象数组,以98:67,105:103,88:96的比分给game数组的前三元素赋初值。调用Set()函数为对象数组的其他元素赋值。设计一个查询功能,让用户输入场次
8、,查询该场次比分情况,以输入。为结束。定义普通函数result(Score*p,Score&e),Score类指针用来传递对象数组的首地址,SCog类对象e为一引用,用来存储比赛的总比分成绩。在心疝t()函数中,通过统计每场比赛的比分情况,得出最后总成绩,在主函数中根据end对象中比赛结果,输出最后的胜利者。完成上述程序并回答下列问题:(1)如果将函数result(Score*p,Score&e)改为result(Score*p,Scoree),修改主函数的调用语句,观察程序运行结果,说明原因。(2)如果将函数result(Score*p,Score&e)改为result(Score*p,Sc
9、ore*e),修改主函数的调用语句,观察程序运行结果,说明原因。classScore(inthoneteam;intopponent;public:Score()(hometeam=0;opponent=0;Score(inta,intb)(hometeam=a;opponent=b;voidSet(inta,intb)(hometeam=a;opponent=b;intGetHomeleam()(returnhometeam;)intGetpponent()(returnopponent;)intDisplayO(returnhometeam;returnopponent;intresult
10、(Score*p,Score&e)fbr(inti=0;ipli.GetOpponentO)(e.hometeam+;)elsee.opponent;intmain()inti;Scoregame5=Score(98,67),Score(105,103),SCOre(88.96),SCOre(),SeOre();ScoreFl=Score(0,0);ccini;while(i0)(coutgamei-1.GetHometeam()endlgamei-ll.GctOpponent()FO.Getpponcnt()冠军是主队else冠军是客队4.阅读课本P893.6程序实例-学生信息管理系统”程序
11、,按照课本的运行步骤运行一遍。然后修改该程序,使得在主菜单中选择输入2时,显示如下的的二级菜单:木木*木按照姓名查询*木木*2.按照年龄查询*3.按照专业杳询*4.按照学号查询*木云*木*0j回回主菜单*左*编写对应的二级菜单程序,实现按照不同的查询方式查询学生信息,最后设计运行步骤验证修改后程序是否达到查询学生信息的目的。#includeusingnamespacestd;constintN=10;voidmenu();voidmenu2();voidOututStu(Student*array);voidInputStu(Student*array);intSearchStu(Studen
12、t*array,char*na);intSearchStu2(Student*array,cha*rna2);intSearchStu3(Student*array,char*number1);intcount=0;intmain()(StudentarrayN;intchoice;domenu();cinchoice;if(choice=0&choicechoice;if(choice=0&choicena;inti;i=SearchStu(aay,na);if(i=N)查无这人elsearrayi.Display();break;case2:intt;cint;arraylt.Displa
13、y();case3:charna220;cinna2;intQ;Q=SearchStu2(array,na2);if(Q=N)查无此专业elsearrayi.Display();break;case4:charnumberI201;cinnumberll20;intQ;Q=SearchSlu3(array,number1);if(Q=N)查无此学号elsearrayil.DisplayO;break;default:break;while(choice);returnO;/cinna;/inti;/i=SearchStu(array,na);/if(i=N)/查无这人!/else/arrayil.Display();/break;