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

下载本文档

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

文档简介

实验4类中数据的共享与保护

一、实验目的与实验要求

(1)掌握友元的定义和应用。

(2)掌握对象数组的定义、初始化方法及应用。

(3)掌握指针和引用作为函数参数的应用。

(4)掌握在类内定义静态数据成员以实现共享的基本方法,并根据需要定义相应的静态成

员函数专门操作静态数据成员。

(5)掌握类中常数据成员的定义及初始化方法,正确使用常数据成员。

(6)理解常成员函数的意义以及常对象的意义,在程序中正确定义常对象,并正确调用相

应的成员函数。

二、实验内容

1.编写一个程序,定义一个Circle类,按下述内容要求定义相关的数据成员及成员函数,最

后在主函数中输出各圆的半径及对应面积,并一次性输出平均面积。

Circle类中定义4个数据成员:常数据成员PI代表圆周率,静态数据成员counl用于统计圆

对象的个数,普通的double型数据成员r代表圆的半径,普通的double型数据成员area代表圆的

而积,所有数据成员均定义为私有属性。再定义相关的成员函数,用于求单个圆的面枳、输出圆

的半径及面枳、获取静态数据成员的值。

②主函数中以一维对象数组定义若干个圆类的对象,调用相应的函数,求面积,并输出每

一个圆的半径及对应的面积,并且输出一次圆的个数。

③在Circle类中增加一个友元函数的声明,用来求所有圆面枳的平均值,并实现该函数的

代码,主函数中增加调用此函数的语句,输出所有圆面积的平均值。

Cincludc<iostreani>

usingnamespacestd:

classCircle

constdoublePI:

staticintcount:

doubleRadius:

public:

1/15

Circle(doubler):PI(3.14)

//Radius=newsizeof(r);

Radius=r;

count—;

doubleAreaO:

doubleCircumferenceO;

intGetiiiountO;

CircleO;PK3.14)

0

doubleCircle::Areao

/

returnPI*Radius*Radius;

}

doubleCircle::Circumference()

(

returnRadius:

)

intCircle::Getmount0

(

returncount;

)

intCircle::count=0:

2/15

intmairiO

3/15

2.程序改错,清修改下列程序.尽最减少增行或者减行,使程序的运行结果如下:

Thenumberofallstudents:0

Phenumberofal1shidents:1

Thenumberofallstudents:0

Phcnumberofallstudents:2

Fhenumberofallstudents:2

要求:类中的数据成员连同访问属性均不可以修改.

〃错误程序源代码如N:

include<iostream>

5/15

usingnamespacestd:

classStudent

private:

charname[20];

staticinttotal;〃用来统计学生总人数

public:

Student(){total-»+;}

Student()()

Student(char*p='Wang);staticintGetTotaK);

);

staticintStudent::total=0:

Student::Student(char*p-.片ang"){

sti-epy(name,p);

total++;

)

staticintStudent::GetTotal0

returntotal:

)

intmain()

(

cout<XwThenumberofallstudents:*«Student::Total«endl:Student*p=newStudent("Li");

cout«*Thenumberofal]students:*«p->GetTotal()<<endl;deletep:

cout«"Thenumberofal1students:*«Studcnt::total«cndl;Students[2]:

cout«*Thenumberofallstudents:*«s[0].total«endl:cout«*Thenumberofallstudents:*«s[l].

total«endl;return0:

classStudent

private:

charname[20];

staticmttotal;

public:

StiidentQ

"include<iostream>

6/15

usingnamespacestd:

total++:

-Studento

total-;

Stxident(char*p="Wang'):

staticmtGetTotalQ;

mtStudent::total=0;

Student::Student(char*p)

strepy(name,p);

total-W-;

iniStudent::GelTotalQ

rehirntotal:

intmain。

cout«MThenumberofallstudents:"«Shidenl::GetTotalO«endl;

Strident*p=newStudent(*L『);

cout«KThenxunberofallstudents:"«p->GetTotal()«endl;

deletep:

7/15

cout«"Thenxunberofallstudents:n«p->GetTotalO/*Sttident::total*/«endl;

Students[2];

cout«"Thenumberofal1studentsGotTotalQ«oiidl;

cout^Thenumberofallstudents:'«s[1].GetTotal()«endl;

rehirn0:

3.设计一个Score类,该结构有两个数据成员,分别为整型的hometeam,.主队)和。pponent[客队)。用

类定义一个含有b个元素的game数组,用于记录一个球队全部3场比赛的每场比分。

①定义相关的构造函数,初始比分均为0:0,Set。函数用于修改每场比分,GetHometeamO函数

用于提取主队的比分,GetOpponentO函数用于提取客队的比分。Display。用于显示比分情况,输出

形如55:660

②定义对象数组game,并初始化对象数组,以98:67,1Q5:103,88:96的比分给game数组的前三元

索赋初值。

③调用Set()函数为对象数组的其他元素赋值。

④设计一个查询功能,让用户输入场次,查询该场次比分情况,以输入。为结束,

⑤定义普通函数result〈Score*p.Score&e),Score类指针用来传递对象数组的首地址,Score

类对象e为一引用,用来存储比赛的总比分成绩。在result()函数中,通过统计每场比赛的比分

情况,得出最后总成绩,在主函数中根据end对象中比赛结果,输出最后的胜利者.

完成上述程序并回答下列问题:

1)如果将函数result(Score*p,Scoreae)改为result(Score*p,Scoree),修改主函数的调用语

句,观察程序运行结果,说明原因。

⑵如果将函数result(Score*p,Score&c)改为result(Score*p,Score*c),修改.主函数的调用语

句,观察程序运行结果,说明原因。

Cinclude\iostream>

8/15

usingnamespacestd;

classScore

(

inthoineteain:

intopponent;

public:

ScoreO

(

hometeani=0;

opponent=0;

)

Score(inta,inib)

(

honieteaiii=a;opponent=b;

}

voidSet(inta,intb)

(

honieteaiii=a;opponent=b;

}

intGetHomotcamO

(

returnhornetearn;

}

intGetOpponentO

(

returnopponent;

}

intDisplayO

9/15

returnhoiiieteam;

returnopponent;

}

intresult(Score*p.Score&e)

fbrfinti=0;i(3;i++)

iKpfi].GetHometeamO>p[i..GetOpponentO)

e.hometeam+-;

elsee.opponent;

iutmaiiiO

{inti;

Scoregam祯5]=(Score(98,67),Score(105,103)Score(88,96)ScoreO,ScoreO);

ScoreF[l]={Score(0,0));

coul«*pleaseinputthenumber*«endl;

cin»i:

whileG>0)

(cout«gameCr1].Ge11lometearn()<<end1«Ramefi-1].GetOpponent()«end1;return0;

)

cout«-最终冠军是*«cndl;

//result(game.F);

10/15

if(F[0].GetHometeam()>F[0].GetOpponent())coul«*地军是.主队”《endl;

else

cout,,冠军是客队,《e⑹1:4.阅读课本P893.6”程序实例一一学生信息管理系统”程

序,按照课本的运行步骤运行一遍.然后修改该程序,使得在主菜单中选择谕入2时,

显示如下的的二级菜单:

**♦*♦*♦♦**1.按照姓名查询♦***♦**♦*♦

****“x**.2.按照年龄查询♦***♦♦*♦*♦

******♦**♦3.按照专业查询”***“**

♦*****♦♦**4.按照学号查询****=*♦*♦事44相料*“返回主菜单相m♦♦率

编写对应的二级菜单程序,实现按照不同的查询方式查询学生信息,最后设计运行步赚验证修

改后程序是否达到查询学生信息的R的。

ttincIude<iostream>

"include*example3"6.student,h*

usingnamespacestd;

constintN=10:

voidnienuO;

voidnienu2();

voidOutputStu(Student*array);

voidInputStu(Student*array):

intSearchStu(Student*array,char*na):

intSearchStu2(Student*array,char*na2):

intScarchStu3(Student*array,char*numberl);

intcount=0;

intinaiiiO

(

Studentarray[N];

intchoice;

do

11/15

HienuO;

cout«Pleaseinputyourchoice:*:cin»choice:

iKchoice>=0&&choice<=3)switch(choice)

(

case1:Inputstu(array);break;

case2:

do

nieiu20://cout«*Inputthenamesearched*«endl:

cout«*Pleaseinputyourchoice/:

cin»choicc;

iKchoice>=0&&choice<«4)//charna[20];

s-itch(choice)

case1:

charna[20]:

cin»na;

inti;

i=SearchStu(array,na);

iKi==N)

cout«"查无这人!¥n”;

12/15

else

array[i].Display。;

break;

case2:

iiitt:

cin»t:

array[t:.Display。;

case3:

cout«*Inputthespecia1ity*«end1:charna2[20.;

cin»na2;iiitQ:

Q=ScarchStu2(array,na2);

if(Q==N)

cout《查无此专业!

else

anay{i]DiKplayO:

break:

case4:cout«*Inputth3number'«endl:

charnumber1[20];

cin»numberl[20J;

intQ;

Q=ScarchStu3(array,number1);

if(Q==N)

cout«"查无此学号!¥n”;

else

array[i].Display0;

break;

default:break:

(whi1c(choice);

return0;

13/15

//cin»ra:

//inti;

//i=SearchStu(array,

na)

//if(i==N)

//cout«"查无这人!¥iT;

//else

//aiTay[i].Display);

//break;

case1

case3:OutputStu(array);break;default:break;

.while(choice):

return0;

voidmenuO

cout«***********L录入信息**********

coul«”**********2•查询信息,**********"«endl:

cout<X"**********3.浏览信息**********\<endl:

cout〈X"**********0.退出**********'«endl;

voidnienu2()

cout«***********1•按照姓名查询**********"endl;

cout«**********2.按照年龄查询**********,«endl;

cout«***********3.按!1所专业查询***********«。句1;

coul«***********4.按口所学号查询***********«eridl:

cout«-**********0,返回单***********«e

温馨提示

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

评论

0/150

提交评论