实验4类中数据的共享与保护_第1页
实验4类中数据的共享与保护_第2页
实验4类中数据的共享与保护_第3页
实验4类中数据的共享与保护_第4页
实验4类中数据的共享与保护_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、实验4类中数据的共享与保护实验4类中数据的共享与保护一、实验目的与实验要求掌握友元的定义和应用。掌握对象数组的定义、初始化方法及应用。掌握指针和引用作为函数参数的应用。掌握在类内定义静态数据成员以实现共享的基本方法,并根据需要定义相应的静态成员函数专门操作静态数据成员。掌握类中常数据成员的定义及初始化方法,正确使用常数据成员。理解常成员函数的意义以及常对象的意义,在程序中正确定义常对象,并正确调用相应的成员函数。二、实验内容1.编写一个程序,定义一个Circi类,按下述内容要求定义相关的数据成员及成员函数,最后在主函数中输出各圆的半径及对应面积,并一次性输出平均面积。Circi类中定义4个数据

2、成员:常数据成员pi代表圆周率,静态数据成员counti于统计圆对象的个数,普通的double型数据成员r代表圆的半径,普通的double型数据成员area代表圆的面积,所有数据成员均定义为私有属性。再定义相关的成员函数,用于求单个圆的面积、输出圆的半径及面积、获取静态数据成员的值。主函数中以一维对象数组定义若干个圆类的对象,调用相应的函数,求面积,并输出每个圆的半径及对应的面积,并且输出一次圆的个数。在Circi类中增加一个友元函数的声明,用来求所有圆面积的平均值,并实现该函数的代码,主函数中增加调用此函数的语句,输出所有圆面积的平均值。#includeusingnamespacestd;c

3、lassCircleconstdoublePI;staticintcount;doubleRadius;public:Circle(doubler):PI(3.14)/Radius=newsizeof(r);Radius=r;count+;doubleArea();doubleCircumference();intGetmount();Circle():PI(3.14);doubleCircle:Area()returnPI*Radius*Radius;doubleCircle:Circumference()returnRadius;intCircle:Getmount()returncoun

4、t;intCircle:count=0;intmain()/Circlec1(3),c2(4);/coutareaofc1=c1.Area(),circumferenceofc1=c1.Circumference()c1.Getmount()endl;/coutareaofc2=c2.Area(),circumferenceofc2=c2.Circumference()c2.Getmount()endl;doubler;Circlec2=Circle(3),Circle(4);/intcount=0;for(inti=0;ir;Circle(r);/ci.Circle:Area();/Circ

5、leArea();/CiecleCircumference();/Circlec1;coutareaofc=要求:类中的数据成员连同访问属性均不可以修改。/错误程序源代码如下:#includeusingnamespacestd;classStudentprivate:charname20;staticinttotal;/用来统计学生总人数public:Student()total+;Student()Student(char*p=Wang);staticintGetTotal();staticintStudent:total=0;Student:Student(char*p=Wang)strc

6、py(name,p);total+;staticintStudent:GetTotal()returntotal;intmain()coutThenumberofallstudents:Student*p=newStudent(Li);coutThenumberofallstudents:GetTotal()deletep;coutThenumberofallstudents:Students2;coutThenumberofallstudents:coutThenumberofallstudents:return0;#includeusingnamespacestd;classStudent

7、private:charname20;staticinttotal;public:Student()total+;Student()total-;Student(char*p=Wang);staticintGetTotal();intStudent:total=0;Student:Student(char*p)strcpy(name,p);total+;intStudent:GetTotal()returntotal;intmain()coutThenumberofallstudents:coutThenumberofallstudents:GetTotal()deletep;coutThen

8、umberofallstudents:GetTotal()/*Student:total*/Students2;coutThenumberofallstudents:coutThenumberofallstudents:return0;3.设计一个Score类,该结构有两个数据成员,分别为整型的home_team(主队)和opponent(客队)。用Score类定义一个含有5个元素的game数组,用于记录一个球队全部5场比赛的每场庄分。定义相关的构造函数,初始比分均为0:0,Set()函数用于修改每场比分,GetHometeam()函数用于提取主队的比分,GetOpponent(函数用于提取客

9、队的比分。Display()用于显示比分情况,输出形如55:66。定义对象数组game,并初始化对象数组,以98:67,105:103,88:96的比分给game数组的前三元素赋初值。调用Set()函数为对象数组的其他元素赋值。设计一个查询功能,让用户输入场次,查询该场次比分情况,以输Z0为结束。定义普通函数result(Score*p,Score&e),Score类指针用来传递对象数组的首地址,Score类对象e为一引用,用来存储比赛的总比分成绩。在result()函数中,通过统计每场比赛的比分情况,得出最后总成绩,在主函数中根据end对象中比赛结果,输出最后的胜利者。完成上述程序并回答下列

10、问题:如果将函数result(Score*p,Score&e)改为result(Score*p,Scoree),修改主函数的调用语句,观察程序运行结果,说明原因。如果将函数result(Score*p,Score&e)改为result(Score*p,Score*e),修改主函数的调用语句,观察程序运行结果,说明原因。#includeusingnamespacestd;classScoreinthometeam;intopponent;public:Score()hometeam=0;opponent=0;Score(inta,intb)hometeam=a;opponent=b;voidSe

11、t(inta,intb)hometeam=a;opponent=b;intGetHometeam()returnhometeam;intGetOpponent()returnopponent;intDisplay()returnhometeam;returnopponent;intresult(Score*p,Score&e)for(inti=0;ipi.GetOpponent()e.hometeam+;elsee.opponent-;intmain()inti;Scoregame5=Score(98,67),Score(105,103),Score(88,96),Score(),Score(

12、);ScoreF1=Score(0,0);coutpleaseinputthenumberi;while(i0)coutreturn0;cout最终冠军是F0.GetOpponent()cout冠军是主队elsecout冠军是客队4阅读课本P893.6“程序实例-学生信息管理系统”程序,按照课本的运行步骤运行一遍。然后修改该程序,使得在主菜单中选择输入2时,显示如下的的二级菜单:*1.按照姓名查询*2.按照年龄查询*3.按照专业查询*4.按照学号查询*0.返回主菜单*编写对应的二级菜单程序,实现按照不同的查询方式查询学生信息,最后设计运行步骤验证修改后程序是否达到查询学生信息的目的。#incl

13、ude#includeexample3_26_student.husingnamespacestd;constintN=10;voidmenu();voidmenu2();voidOutputStu(Student*array);voidInputStu(Student*array);intSearchStu(Student*array,char*na);intSearchStu2(Student*array,char*na2);intSearchStu3(Student*array,char*number1);intcount=0;intmain()StudentarrayN;intchoi

14、ce;domenu();coutchoice;if(choice=0&choice=3)switch(choice)case1:InputStu(array);break;case2:domenu2();/coutInputthenamesearchedcoutchoice;if(choice=0&choicena;inti;i=SearchStu(array,na);if(i=N)coutt;arrayt.Display();case3:coutInputthespecialityna2;intQ;Q=SearchStu2(array,na2);if(Q=N)cout查无此专业!n;else

15、arrayi.Display();break;case4:coutInputthenumbernumber120;intQ;Q=SearchStu3(array,number1);if(Q=N)coutna;/inti;/i=SearchStu(array,na);/if(i=N)/cout喳无此人!n;/else/arrayi.Display();/break;icase1case3:OutputStu(array);break;default:break;while(choice);return0;voidmenu()coutv*i录入自*coutv*2查询彳信自*coutv*3汶卩i览自

16、*coutv*0退出*voidmenu2()iicoutvv*1按照姓名查询*coutvv*2按照年龄查询*coutvv*3按照专业查询*icoutvv*4照学号杳询*coutvv*0返回主菜单*“iivoidOutputStu(Student*array)输出对象数组元素coutvv学生总人数=for(inti=0;iarrayi.Display();intSearchStu(Student*array,char*na)/按/姓名杳询inti,j=N;for(i=0;iif(strcmp(arrayi.GetName(),na)=0)j=i;returnj;intSearchStu2(Student*array,char*na2)inti,j=N;for(i=0;iif(st

温馨提示

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

评论

0/150

提交评论